android Activity LaunchMode
Activity LaunchMode
Mainfest.xml
<activity
android:launchMode = "singleTask"
1.standard标准模式
默认模式,每次启动都会创建新的实例,onCreate,onStart,onResume都会被调用。谁启动了这个Activity,这个Activity就运行在启动它的那个Activity所在的栈中。
2.singleTop
如果已经位于栈顶,则不会被创建,onCreate,onStart并不会被调用。如果不在栈顶,仍然会新创建。
singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
App程序中(或浏览器中)保存的书签,假如用户看到一个界面保存自己喜欢的标签,假如要保存10个,这个时候用户在返回键的时候,则会返回10次才能返回到App应用中, Android下singleTop 则解决该问题。
3.singleTask
如果不在栈顶,会把所有上面的全部出栈。
singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
如果一个App中,有一个功能需要加载网页内容,打开一个browserActiviy现在网页内容,则内存开销非常大,首先要初始化webkit /c++ 嵌入式浏览器内核broweractivity 配置了singleTask,空间换时间,使用该模式可以节省内存开销。
4.singleInstance
实际上启动了一个新的栈,由于栈内复用特性,后续请求均不会创建新的activity,除非这个任务栈被系统销毁。假如B是singleInstance。当A启动B时,新开了一个栈。B又启动C时,C会在A上面。这样当C按BACK时,会看到栈下面的A。然后A再按BACK,因为其栈已经清空,此时会看到B。
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
App各种词典,向有道词典,什么金山词典,说极端是因为不想被放置到同一个任务栈里面,它是全局的系统程序应用,达到节省内存的使用目的。
参考http://bbs.9ria.com/thread-258213-1-1.html