详解Android中Activity的四大启动模式实验简述
发布时间 - 2026-01-10 21:49:51 点击率:次作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,来帮助大家理解Activity的四大启动模式。

演示效果如下:
第一步:实验前准备,相关配置文件以及Activity的建立
(1)AndroidMainfest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.intentflags">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//另外两个activity
<activity android:name=".Main2Activity"> </activity>
<activity android:name=".Main3Activity"></activity>
</application>
</manifest>
(2)layout中三个activity的三个布局文件activity_main.xml(这里演示一个,其余两个只是下面TextView文字不一样)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.administrator.intentflags.MainActivity">
<Button
android:text="第一个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click1" />
<Button
android:text="第二个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click2" />
<Button
android:text="第三个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click3" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
//其余两个仅文字不一样
android:text="第一个页面"
android:textSize="50sp"/>
</LinearLayout>
(3)java中三个activity的实现代码MainActivity.java(仅演示一个,其他两个完全相同)
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
/**
* Created by panchengjia on 2016/12/14.
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//其他两个界面此处引用各自对应的layout文件
setContentView(R.layout.activity_main);
}
public void click1(View view){
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
//记录Taskid用于实验说明
Log.i("Tag","页面一taskId:"+getTaskId());
}
public void click2(View view){
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);
Log.i("Tag","页面二taskId:"+getTaskId());
}
public void click3(View view){
Intent intent = new Intent(this,Main3Activity.class);
startActivity(intent);
Log.i("Tag","页面三taskId:"+getTaskId());
}
}
第二步:standard默认(标准)模式下的演示实验
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
我们的操作结果如下图:
log图如下(未记录回退log):
通过分析操作图以及log,得出这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。
第三步:singleTop模式下的演示实验(设置页面二为singleTop)
在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。
AndroidMainfest.xml中设置代码如下:
<activity android:name=".Main2Activity"
android:launchMode="singleTop"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
分析此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。
第四步:singleTask模式下的演示实验(设置页面二为singleTask)
在当前任务栈中,判断栈里是否存在Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity。
AndroidMainfest.xml中设置代码如下:
<activity android:name=".Main2Activity"
android:launchMode="singleTask"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
第五步:singleInstance模式下的演示实验(设置页面二为singleInstance)
新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。
AndroidMainfest.xml中设置代码如下:
<activity android:name=".Main2Activity"
android:launchMode="singleInstance"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# activity四大启动模式
# android
# 启动activity
# activity
# 关于Android中点击通知栏的通知启动Activity问题解决
# Android中activity的启动模式
# Android利用Intent启动和关闭Activity
# Android编程中Activity的四种启动模式
# Android 启动另一个App/apk中的Activity实现代码
# 则会
# 多个
# 模式下
# 创建一个
# 如下图
# 未记录
# 第一个
# 二为
# 会在
# 不存在
# 配置文件
# 应用程序
# 检测到
# 是在
# 我在
# 在这个
# 并在
# 第二个
# 在这种
# 只有一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
如何在香港免费服务器上快速搭建网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何在万网ECS上快速搭建专属网站?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
如何快速搭建安全的FTP站点?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
lovemo网页版地址 lovemo官网手机登录
nodejs redis 发布订阅机制封装实现方法及实例代码
如何快速搭建高效香港服务器网站?
Java类加载基本过程详细介绍
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Python文件流缓冲机制_IO性能解析【教程】
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
网站制作免费,什么网站能看正片电影?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
使用豆包 AI 辅助进行简单网页 HTML 结构设计
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
jquery插件bootstrapValidator表单验证详解
如何在万网利用已有域名快速建站?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
利用python获取某年中每个月的第一天和最后一天
高性能网站服务器配置指南:安全稳定与高效建站核心方案
新三国志曹操传主线渭水交兵攻略
Laravel如何配置和使用缓存?(Redis代码示例)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何在IIS管理器中快速创建并配置网站?
原生JS实现图片轮播切换效果
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
图册素材网站设计制作软件,图册的导出方式有几种?
linux top下的 minerd 木马清除方法
Java解压缩zip - 解压缩多个文件或文件夹实例
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Linux系统命令中tree命令详解
如何用PHP工具快速搭建高效网站?
JS中对数组元素进行增删改移的方法总结
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
EditPlus 正则表达式 实战(3)

