Activity的启动模式以及setFlags
来源:互联网 发布:mac 命令行 编辑:程序博客网 时间:2024/05/17 03:42
1、Activity启动模式介绍:
Activity启动模式可以理解为Activity的启动方式或者启动策略,可以在AndroidManifest.xml文件的android:launchMode里面设置,也可以在代码Intent里面设置。
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
对于Activity,Android采用任务栈来管理,在仅考虑一个任务栈的情况下先启动的先入栈,后启动后入栈,按下back键就会执行出栈的过程。
例如当A,B,C三个Activity依次启动,再按下back键时:
2、启动模式:
2.1 standard:
这个是默认的启动模式,Activity每次启动都会创建出新的Activity加入到任务栈中,其入栈和出栈逻辑较为简单,为上面的任务栈演示图。
2.2 singleTop:
当栈顶有将要启动的Activity的实例时候就会重用该栈顶的Activity,此时会调用栈顶Activity的onNewIntent方法,若栈顶没有该Activity则会创建新的实例加入栈中。例如A跳转到启动模式为singleTop的B,B在栈顶,再启动B时会执行B的onPause->onNewIntent->onResume,此时按下back键回退到A
2.3 singleTask
如果栈内存在要跳转的Activity则使用该Activity,同时清空该Activity到栈顶的Activity,如果没有则创建新的实例。例如当A为singleTask时效果如下,
2.4 singleInstance
该模式启动的Activity会加入新的任务栈,该Activity可以被多个应用共享,并且只会创建一次,例如开启的浏览器可以共享。
3、补充:
3.1当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法
3.2普通界面建议使用singleTop,主界面通常为singleTask
4、setFlags:
setFlags是Intent的一个方法,通常用于Activity的启动设置
1)FLAG_ACTIVITY_CLEAR_TASK:
顾名思义,清空当前Task的所有Acitvity,之后再加入新创建的Activity,这个必须和FLAG_ACTIVITY_NEW_TASK一起使用,当C设置代码
Intent intent = new Intent(B.this,C.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);startActivity(intent);结果为:
2)FLAG_ACTIVITY_CLEAR_TOP:
清除栈中元素使得存在的某个Activity位于栈顶,例如栈中有A B C,C再跳转到A最后栈结果为 A。
3)FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:
如果设置这个标志,这个Activity就不会在近期任务中显示。4)FLAG_ACTIVITY_FORWARD_RESULT:
A startActivityForResult 启动 B,B设置 FLAG_ACTIVITY_FORWARD_RESULT启动C,则C的结果返回给A。注意B启动C的方式不能是startActivityForResult5)FLAG_ACTIVITY_NO_HISTORY:
新的Activity不会入栈,A设置FLAG_ACTIVITY_NO_HISTORY启动B,B启动C最后结果为A C
6)FLAG_ACTIVITY_SINGLE_TOP:
类似lanchMode singleTop
7)FLAG_ACTIVITY_NEW_TASK:
新启动的Activity在新的任务栈,注意两个Activity的taskAffinity不同才回启动新的任务栈
注意:
如果调用Context(非Activity)的startActivity,要设置FLAG_ACTIVITY_NEW_TASK,否则会报错
0 0
- Activity的启动模式以及setFlags
- Activity加载模式以及Intent的setFlags
- Activity启动模式intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Activity的加载模式及Intent.setFlags
- Activity的加载模式及Intent.setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- 区分Activity的四种加载模式----以及Intent的setFlags
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags()
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();
- 有关Activity的Launch mode 以及Intent的setFlags
- [转]有关Activity的Launch mode 以及Intent的setFlags
- 光学变焦与数码变焦的区别
- grep multiple strings
- 二分查找实现(Jon Bentley:90%程序员无法正确实现)
- Apache设置目录禁止访问
- 字符串组合——位运算
- Activity的启动模式以及setFlags
- table最佳设计
- 关于CSRF攻击及mvc中的解决方案 [ValidateAntiForgeryToken]
- 编译Kodi(XBMC 14) 和XBMC-13.2-Gotham版本的记录
- Android 找不到或restart adb
- Conversion to Dalvik format failed: Unable to execute dex:
- android listview多种布局 getViewTypeCount和getItemViewType
- UVAOJ 10878 ——Decode the tape 模拟
- HDU 4472 - Count(计数DP)