android Activity四种启动模式

当手机启动一个应用时,会产生一个task,task是一个具有栈结构的对象,栈里面存放着的是activity,一个task可以管理多个activity,启动一个应用,也就创建了一个与之对应的task。


activity四种启动模式:
1. standard
2. singleTop
3. singleTask
4. singleInstance


设置activity的启动模式可以在manifest.xml文件中配置<activity>的android:launchMode属性,如:
<activity
            android:name="com.maxtop.nursehome.userapp.GuideActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait" 
            android:launchMode="standard">
        </activity>;


下面分别说说四中启动模式的特点:
1. standard,标准(默认)模式,Activity创建一个新的实例,并将该Activity添加到当前Task栈中.注意,这种方式不会启动新的Task,只是将新的Activity添加到原有的Task。
2.singleTop,Task顶单例模式,该模式和standard模式基本一致,但有一点不同:当将要被启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用Task栈顶的Activity。
3.singleTask,Task内单例模式,采用该加载模式时,Activity在同一个Task内只有一个实例.如果将要启动的Activity存在但是没有位于栈顶,那么此时系统会把位于该Activity上面的所有其他Activity全部移出Task,从而使得该目标Activity位于栈顶
4.singleInstance: 全局单例模式, 在此种加载模式下,无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例且会用一个全新的Task栈来装载该Activity实例.当系统采用singleInstance模式加载Activity时,又分为以下两种情况:
(1)如果将要启动的Activity不存在,那么系统将会先创建一个全新的Task,再创建目标Activity实例并将该Activity实例放入此全新的Task中
(2)如果将要启动的Activity已存在,那么无论它位于哪个应用程序,哪个Task中;系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来

简单一点就是说,在当前栈点击了“返回”,那么就开始从当前栈退,直到当前栈退完所有activity,那么接着退最近活跃的那个栈,依次类推,直到所有的栈退完。或者可以按照各个栈内的活跃时间,把各个栈再放入一个栈中,这样就好理解了。


TaskAffinity对LaunchMode的影响
当使用Launch Mode 来改变系统默认的任务调度的时候,如果是用到Single Task或者Single Instance的时候,还要注意到Affinity的使用,要跟Affinity配合使用,可能才能达到我们期望中的效果。而Affinity,其实是Android提供的一个表从属意义的参数,类似于一个Tag值,它表明当前Activity属于哪一个Tag,相当的Affinity值的Activity,如果不使用其他的标志,如Single Instance之类,那么都会在存在于同一个task中。一般情况下,我们并不定义Task Affinity值,则其默认的值就是当前App的包名。
关于TaskAffinity的介绍见:http://blog.csdn.net/liuhe688/article/details/6761337




你可能感兴趣的:(android Activity四种启动模式)