任务栈Task的模式

  android每启动一个应用程序系统都会创建一个任务栈给这个应用。这个程序启动的activity都会加到这个栈中,activity的启动模式不同,在栈中存储销毁activity的方式也不同。在清单文件里可以设置activity的启动模式(红色标记出):

  <activity
            android:configChanges="keyboardHidden|orientation"
            android:launchMode="standard"
            android:name=".SecondActivity"
            android:label="secondactivity" >
             <intent-filter>
                <action android:name="com.example.multiactivity.SecondActivity" />
                <action android:name="com.example.multiactivity.SecondActivity2" />
                <action android:name="com.example.multiactivity.SecondActivity3" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

  下面介绍一下4个启动模式

1、standard模式:系统默认的模式,即不管activity是否重复都会像栈里加入activity,因此在按返回键时每次销毁一个activity,因此按多次销毁任务栈里所有的activity才会退出程序。

2、singleTop模式:当一个activity指定为该模式时,在点击调用该activity时,会检测栈顶是否为该activity如果是就调用栈里的activity,否则才会重新创建一个新的activity放入栈里。

应该场景:如浏览器的添加书签activity,如果用户在添加书签的activity里添加了20书签,如果默认模式用户想退出书签需要按20次返回键,并创建20个activity到栈里浪费空间,应用该模式则只会创建一个书签activity,避免糟糕用户体验。

3、singleTask模式:当一个activity指定为该模式时,在加载该activity时候会检测栈里是否有该activity,如果有则直接调用栈里的activity,同时销毁掉调用activity上面的所有activity。

应该场景:如浏览器activity开销非常大,需要初始化webkit/c++嵌入式浏览器内核,将该activity配置成这个该模式。

4、singleInstance模式,该模式很极端,当一个activity指定为该模式时,调用该activity时系统不会将activity放入默认的分配的任务栈,而是创建一个新的任务栈放入新的任务栈内。并在默认的任务栈内引用新任务栈里的该activity,当再次调用该activity时候再次引用新建栈内的activity,当按返回键销毁该activity时候就会销毁新任务栈内的该activity,并且销毁默认任务栈内的对该activity的所有引用。

应该场景:适用全局都有的activity应该,可以节约内存。如有道词典,在每个界面activity都有调用查词的activity,我们可以将查词的activity配置为该模式。

原文地址:https://www.cnblogs.com/bokeofzp/p/4722141.html