Andriod活动的启动模式及使用场景

Activity有四种加载模式:standard(默认), singleTop,singleTask和singleInstance。可以在AndroidManifest.xml中通过给activity标签指定android:launchMode属性来选择启动模式。

1.standard(可以自己启动自己,平常用该模式)

standard是活动默认的启动模式,在不进行显示指定的情况下,所有的活动都会自动使用这种模式,在该模式下,每当启动了一个新的活动,它就会返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次都会创建该活动的一个新的实例。
Andriod活动的启动模式及使用场景

2.singleTop(避免了自己启动自己)

当活动的启动模式指定为singleTop,在启动活动时,如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。
Andriod活动的启动模式及使用场景

3.singleTask(避免了启动重复的活动,信息会保留)

当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
Andriod活动的启动模式及使用场景

4.singleInstance

当活动的启动模式指定为singleInstance时,会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都公用的同一个返回栈,也就解决了共享活动实例的问题。
Andriod活动的启动模式及使用场景

应用场景:

singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。

singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。