Android(安卓)Activity 的四种启动模式 lunchMode 和 Intent.setFlags();
一.AndroidActivity 四种启动模式 lunchMode 在Manifest 配置文件中的属性如下:
(1) android:launchMode="standard"
(2)android:launchMode="singleTop"
(3)android:launchMode="singleTask"
(4)android:launchMode="singleInstance"
二.说明:
Android 中Activity 生命周期 跟Task 的关系,就是进栈出栈。
很多时候我们在Manifest的Activiy 配置信息中没有看到lunchMode 属性,其实没有配置这个属性就是系统默认属性 android:launchMode="standard"。同一个工程AppA在这种模式下有AfirstActivity 启动 AsecondActivity,启动代码是:
?1 2 3 4 5 | Intent intent = new Intent(); intent.setClass( this , AsecondActivity. class ); startActivity(intent); |
两个TaskId 都是98.说明两个 activity 是在同一个 任务栈 Task 中。
接下来我们让这两个Activity 不在同一个Task 中。有两种方法实现:
(1)不修改启动代码,只修改 Mnaifest 中 给AsecondActivity 配置多添加 两行代码如下:
?
1 2 | android:launchMode= "singleTask" android:taskAffinity= "com.xjp" |
(2)修改启动代码: ?
1 2 3 4 5 6 7 8 | Intent intent = new Intent(); // ComponentName name = new // ComponentName("com.example.appa","com.example.appa.AsecondActivity"); // intent.setComponent(name); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass( this , AsecondActivity. class ); startActivity(intent); |
多添加了一行 ?
1 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
1 | android:taskAffinity= "com.xjp" |
看Log打印:
AfirstActivity taskId = 8 而 AsecondActivity TaskId = 9.所以两个 activity 不是在同一个任务栈 Task 中。虽然两个activity 是在同一个工程下面。
分析:
由此看出,代码里设置
?1 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
1 | android:launchMode= "singleTask" |
1 | android:taskAffinity= "com.xjp" |
1 | android:taskAffinity= "com.xjp" |
1 | android:launchMode= "singleTask" |
1 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
总结:当设置了
?1 | android:launchMode= "singleTask" |
1 | taskAffinity |
三.当 配置文件中设置了 android:launchMode="singleInstance"。不管 activity 怎么启动,都是在一个新的Task 任务中启动activity。
看Log 打印:
两个TaskId 不一样。并且 被启动的activity 唯一存在 新的任务队列中,也就是这个task 队列中只能有 一个activity。
更多相关文章
- Android(安卓)Studio 解决Fetching android sdk component infor
- Android(安卓)Binder原理(四)ServiceManager的启动过程
- android Theme启动APP闪屏处理
- android Theme启动APP闪屏处理
- 从零开始学android-一行两个按钮居中 布局
- Android层次结构
- Android(安卓)Wear开发者预览配置过程
- Android系统启动流程
- Android启动流程篇总结