Android Activity Launch Mode

standard

缺省模式

singleTop

single on Top, 如果在栈顶就不新创建了

如新创建一个activity D为例

  • 不管栈中有没有D,栈顶没有D就新创建一个D
  • 如果栈中有D, 就调用该D的onNewIntent() , 不再新创建
  • 一个stack可能有该activity的多个实例(该activity在栈顶后又有别的activity进栈)

    singleTop适合接收通知启动的内容显示页面。

  • 例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的,用户在点击返回按键的时候也会导致视觉差异。

  • 登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏

singleTask

single in task

回退栈中没有该类型的Activity,创建Activity,否则,onNewIntent+ClearTop。

  • 启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的Task存在
  • 注意会ClearTop
  • 他的上面可以有其他的Activity。这点与singleInstance是有区别的。

    singleTask适合作为程序入口点。

  • 例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

  • WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面

singleInstance

singleInstance,回退栈中,只有这一个Activity,没有其他Activity。

singleInstance应用场景:

  • 闹铃的响铃界面。返回就是用户上一个应用的界面,而不是闹钟的task 栈的activity
  • 此启动模式和我们使用的浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问
  • 系统Launcher、锁屏键、来电显示等系统应用