zoukankan      html  css  js  c++  java
  • 任务栈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配置为该模式。

  • 相关阅读:
    E1696命令行错误: 无法打开元数据文件"platform.winmd"
    搭建集群hadoop
    搭建单节点hadoop
    搭建hadoop遇到的Q&A
    Q&A(Constantly Updating)
    基于Spark的SVM模型手写数字识别
    常见设计模式——装饰模式
    常见设计模式——策略模式
    常见设计模式——观察者模式
    常见设计模式——三种工厂模式(简单工厂、工厂方法、抽象工厂)
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4722141.html
Copyright © 2011-2022 走看看