• Android(java)学习笔记168:Activity 4 种启动模式


    1. 任务栈(task stack):

    任务栈 是用来记录用户操作的行为,维护一个用户体验。

    一个应用程序一般都是由多个activity组成的

    任务栈(task stack)记录存放用户开启的activity的
    一个应用程序一被开启,系统就给他分配一个任务栈,当所有的activity都退出的时候任务栈就清空了
    任务栈的id是一个integer的数据类型 自增长的
    在Android操作系统里面会存在多个任务栈一个应用程序对应着一个任务栈

    下面是发邮件过程理解任务栈:

    当我们点击发送之后,Activity C就关闭了,就会从任务栈中消失,这样这时候用户就会看到任务栈顶端是Activity B,这样用户看到就是B;接下来用户在Activity B中点击返回,这样Activity B就会销毁,用户此时就会看到Activity A,在Activity A中点击返回,就会退出这个应用程序。

    2. Activity启动模式

    可以参看:Activity启动模式图文详解:standard, singleTop, singleTask 以及 singleInstance

    在清单文件中activity节点中配置 android:launchMode属性

    (1)standard的启动模式,默认标准的启动模式

    <activity   android:name ="com.itheima.taskstack.SecondActivity"

                    android:launchMode="standard"/>              

         绝大多数的Activity都是采用的standard的启动模式,开启新的Activity,这个Activity就会被加载到任务栈的栈顶。返回退出Activity,就会从任务栈中里面移除。如果任务栈清空,应用程序退出。

    例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈,如图所示:

    应用场景:绝大多数默认情况

    (2)singleTop的启动模式

    <activity   android:name ="com.itheima.taskstack.SecondActivity"

                    android:launchMode="singleTop"/>  

    任务栈顶部只有一个SecondActivity实例存在,如果这个SecondActivity的实例已经被加入任务栈的顶部,这个SecondActivity就不会被重新创建

    (用户想不断创建新SecondActivity刷新界面,这里就是行不通的)

    应用场景:一个界面避免重复开启很多次。singletop,浏览器的书签

    (3)singleTask的启动模式

    <activity   android:name ="com.itheima.taskstack.SecondActivity"

                    android:launchMode="singleTask"/>  

    单一任务栈:在任务栈里面只可以有1个实例存在

    如果没有实例,就创建,加入到任务栈的栈顶

    如果有实例已经存在,就可以复用这个实例,然后清空这个实例上面的所有的Activity。

    应用场景:如果一个Activity的内存开销或者cpu开销非常大。一般我们设置这个Activity为singleTask的启动模式。保证任务栈中里面只有一个实例存在

    e.g:

    浏览器的BrowserActivity内存开销非常大

    webkit浏览器的内核。解析html标签。解析css标签。javaScript解析引擎

    (4)singleInstance的启动模式

    <activity   android:name ="com.itheima.taskstack.SecondActivity"

                    android:launchMode="singleInstance"/>  

    前面3种启动模式Activity都是运行在当前的应用程序默任务栈里面

    singleInstance是自己单独开启一个任务栈运行

    在自己的单独任务栈里面运行,整个手机的操作系统里面只可能同时存在一个singleInstance实例的Activity

    假设B启动A,A启动C,其中A的启动模式为singleInstance,则:

    应用场景:有道词典,快速取词 ,通话界面等等

  • 相关阅读:
    【阿里前端面试点】目标,想成为一名好的前端工程师
    JavaScript实现数据双向绑定的三种方式
    a标签的下载链接,如果是图片,点击链接是下载一个图片而不是直接打开,应该怎么办?(添加download属性)
    AngularJs scope详解
    setTimeout可以传第三个甚至更多个参数
    (转) css3中的border-radius详解
    (转) JS原生对象、内置对象、宿主对象的区别
    纯css写的步骤条
    css如何实现滚动条隐藏但鼠标仍然可以滚动
    Js 与浮点数
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4799143.html
Copyright © 2020-2023  润新知