一、启动模式介绍
启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的Android:launchMode属性设置;
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
二、任务栈
为了记录用户开启了那些activity,记录这些activity开启的先后顺序,google引入任务栈(task stack)概念,帮助维护好的用户体验。每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序。
三、启动模式
1、standard:默认模式
每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
如图:无论是否存在Activity2,激活Activity2时,会在栈顶创建一个新的Activity,当返回时,会一级
一级返回。
适用于绝大大数情况
id="iframe_0.3029184346091274" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646152.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.3029184346091274',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 706px; height: 419px;">
2、singleTop:单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例(不能创建
自身,不能重叠),而是调用 onNewIntent() 方法;其余情况都要创建Activity实例。
如图:栈顶是Activity2,当再次激活Activity2时,不会创建新的实例。
应用场景: 浏览器书签。 避免栈顶的activity被重复的创建,解决用户体验问题。
id="iframe_0.421656694385504" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646153.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.421656694385504',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 701px; height: 416px;">
3、 singletask 单一任务栈 , activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务
栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并
且清空这个activity任务栈上面所有的activity
应用场景:浏览器activity, 整个任务栈只有一个实例,节约内存和cpu的目的
注意: activity还是运行在当前应用程序的任务栈里面的。不会创建新的任务栈。
id="iframe_0.04949419565017732" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646154.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.04949419565017732',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 703px; height: 418px;">
4. singleInstance 单态 单例模式
单一实例,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity共享 公用的同一个
activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。
应用场景:呼叫来电界面 InCallScreen
id="iframe_0.6398007890564588" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646155.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.6398007890564588',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 555px; height: 709px;">