- standard,创建一个新的Activity。
- singleTop,栈顶不是该类型的Activity,创建一个新的Activity。否则,onNewIntent。
- singleTask,回退栈中没有该类型的Activity,创建Activity,否则,onNewIntent+ClearTop。
- singleInstance,回退栈中,只有这一个Activity,没有其他Activity。
standard
简介:
每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
应用场景:
比如从应用列表页中,点击应用详情,就可以用standard,一般情况下,都可以用standard。
singleTop
简介:
如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
应用:
- 在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则用户如果连续点击好几次,每次都会新建一个Activity。
- 实际的开发过程中,测试妹纸没准给你提过这样的bug:某个场景下连续快速点击,启动了两个Activity。如果这个时候待启动的Activity使用 singleTop模式也是可以避免这个Bug的。
- 在开发过程中,我们有一个场景是从城市列表页选择东京,跳到东京页,再从东京页跳到大阪页,其实东京页和大阪页都是同一个activity,我们需要从大阪页点击返回时,能够直接回到城市列表页,这个时候,用singleTop也是能够很好解决这个问题的。
singleTask
简介:
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
应用
- 最近在做的,在问题详情页,点击进入回答页,回答完并finish后,回到问答详情页;如果问题详情页采用standard方式,将两次创建问题详情页,而采用singleTask则可避免该问题。
- 例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
singleInstance
简介
这个模式非常接近于singleTask,系统中只允许一个Activity的实例存在。区别在于持有这个Activity的任务中只能有一个Activity:即这个单例本身。
应用
- 例如锁屏、电话、闹铃提醒,将闹铃提醒与闹铃设置分离。
- singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
-
如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
参考
singleInstance模式下的坑
singleInstance作为中间页的问题
Activity的LaunchMode应用场景思考
网友评论