standerd

默认模式,每次启动Activity都会创建一个新的Activity实例。

比如:现在有个A Activity,我们在A上面启动B,再然后在B上面启动A,其过程如图所示:

singleTop

如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法。
如果要启动的Activity不在栈顶,则会重新创建该Activity的实例。

比如:现在有个A Activity,我们在A以standerd模式上面启动B,然后在B上面以singleTop模式启动A,其过程如图所示,这里会新创建一个A实例:

如果在B上面以singleTop模式启动B的话,则不会重新创建B,只会调用onNewIntent()方法,其过程如图所示:

singleTask

如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所有的Activity出栈,同时该Activity的onNewIntent()方法会被调用。
如果要启动的Activity不存在于它想要归属的栈中,并且该栈存在,则会创建该Activity的实例。
如果要启动的Activity想要归属的栈不存在,则首先要创建一个新栈,然后创建该Activity实例并压入到新栈中。

比如:现在有个A Activity,我们在A以standerd模式上面启动B,然后在B上面以singleTask模式启动A,其过程如图所示:

singleInstance

基本和singleTask一样,不同的是启动Activity时,首先要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例。

比如:现在有个A Activity,我们在A以singleInstance模式上面启动B,其过程如图所示:

Intent的FLAG

另外,如果startActivity()时往Intent 中加入相应的标志来指定启动模式,这种方式的优先级会比在AndroidManifest中定义的优先级高;但是AndroidManifest中只能定义四种启动方式:standard、singleTop、singleTask、singleInstance,而Intent的flag则有很多种。具体的可以看看文档,我们这里看看部分flag:

FLAG_ACTIVITY_NEW_TASK :跟launchMode中的singleTask一样。
FLAG_ACTIVITY_SINGLE_TOP :跟launchMode中的singleTop一样。
FLAG_ACTIVITY_CLEAR_TOP :launchMode中没有对应的值,如果要启动的Activity已经存在于栈中,则将所有位于它上面的Activity出栈。singleTask默认具有此标记位的效果。
FLAG_ACTIVITY_NO_HISTORY:Activity一旦退出,就不会存在于栈中。同样的,也可以在AndroidManifest.xml中设置“android:noHistory”。
FLAG_ACTIVITY_MULTIPLE_TASK:需要和FLAG_ACTIVITY_NEW_TASK一同使用才有效果,系统会启动一个新的栈来容纳新启动的Activity.
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:Activity不会被放入到“最近启动的Activity”列表中。
FLAG_ACTIVITY_BROUGHT_TO_FRONT:这个标志位通常不是由应用程序中的代码设置的,而是Launch Mode为singleTask时,由系统自动加上的。
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY:这个标志位通常不是由应用程序中的代码设置的,而是从历史记录中启动的(长按Home键调出)。
FLAG_ACTIVITY_CLEAR_TASK:需要和FLAG_ACTIVITY_NEW_TASK一同使用才有效果,用于清除与启动的Activity相关栈的所有其他Activity。

最新文章

  1. AFNetworking 3.0
  2. C#中扩展StringBuilder支持链式方法
  3. nodejs 入门
  4. “Guess the number” game
  5. VSS
  6. iOS 2D绘图详解(Quartz 2D)之Transform(CTM,Translate,Rotate,Scale)
  7. Android核心基础(十)
  8. Android系统的“程序异常退出”[转]
  9. nginx源代码学习资源(不断更新)
  10. Python基础(七)-文件操作
  11. RxJava Map操作详解
  12. PL/SQL 实现行列转换
  13. 网络通信 --> 消息队列
  14. C++笔记001:Microsoft Visual Studio 2010软件的安装与建立第一个cpp文件
  15. linux vi如何保存编辑的文件
  16. .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中
  17. format 插入一个字符,%d,%n
  18. MySQL在默认事务下各SQL语句使用的锁分析
  19. kalinux 五笔安装
  20. python中函数嵌套、函数作为变量以及闭包的原理

热门文章

  1. BZOJ 3876 统一下界上下界费用流
  2. 将UTC日期字符串转为本地时间字符串,如@"yyyy-MM-dd'T'HH:mm:ssZ"转换为本地时间
  3. java内存泄漏与处理
  4. kubernetes运用
  5. 查看服务的cpu gpu各类内存 cpu频率等等信息
  6. cordova打包项目下载gradle失败
  7. Hedera: Dynamic Flow Scheduling for Data Center Networks
  8. springboot + mybatis sql日志
  9. flink⼿手动维护kafka偏移量量
  10. XSS这段时间的学习总结