Activity四种启动模式及其应用

  • standard,创建一个新的Activity。
  • singleTop,栈顶不是该类型的Activity,创建一个新的Activity。否则,onNewIntent。
  • singleTask,回退栈中没有该类型的Activity,创建Activity,否则,onNewIntent+ClearTop。
  • singleInstance,回退栈中,只有这一个Activity,没有其他Activity。

standard

简介:

每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;


Activity四种启动模式及其应用_第1张图片
应用场景:

比如从应用列表页中,点击应用详情,就可以用standard,一般情况下,都可以用standard。

singleTop

简介:

如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;


Activity四种启动模式及其应用_第2张图片
应用:
  • 在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则用户如果连续点击好几次,每次都会新建一个Activity。
  • 实际的开发过程中,测试妹纸没准给你提过这样的bug:某个场景下连续快速点击,启动了两个Activity。如果这个时候待启动的Activity使用 singleTop模式也是可以避免这个Bug的。
  • 在开发过程中,我们有一个场景是从城市列表页选择东京,跳到东京页,再从东京页跳到大阪页,其实东京页和大阪页都是同一个activity,我们需要从大阪页点击返回时,能够直接回到城市列表页,这个时候,用singleTop也是能够很好解决这个问题的。

singleTask

简介:

如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;


Activity四种启动模式及其应用_第3张图片
应用
  • 最近在做的,在问题详情页,点击进入回答页,回答完并finish后,回到问答详情页;如果问题详情页采用standard方式,将两次创建问题详情页,而采用singleTask则可避免该问题。
  • 例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance

简介

这个模式非常接近于singleTask,系统中只允许一个Activity的实例存在。区别在于持有这个Activity的任务中只能有一个Activity:即这个单例本身。

应用
  • 例如锁屏、电话、闹铃提醒,将闹铃提醒与闹铃设置分离。
  • singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
  • 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;


    Activity四种启动模式及其应用_第4张图片

参考

singleInstance模式下的坑
singleInstance作为中间页的问题
Activity的LaunchMode应用场景思考

你可能感兴趣的:(Activity四种启动模式及其应用)