Android四大启动模式

  一、启动模式概述     

    Android中task容器栈,其实,就是Activity的一个容器集合所有的Activity实例都是存放在这个容器栈里面。其实就是数据结构中栈是一个原理:先进后出后进先出所有操作都是发生在栈顶。

    做Android开发朋友都应该知道,应用中每个有效的Activity组件都必须需要在AndroidManifest.xml工程配置文件夹中注册声明。在里面中有很多属性我们可以去配置,如果不配置就使用系统默认的配置属性。其中,我们今天要讨论的Activity启动模式就是属于Activity配置属性之一,叫launchMode,它具有四种启动模式,分别是:1.standard,2.singleTop,3.singleTask,4.singleInstance,一般如果不显示声明,默认为standard模式。如下图:

二、启动模式作用

    launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。这这里就不详细介绍task,我会在后面其他文章专门来讨论task,有兴趣了解的朋友可以关注我后面的博客文章。

三、分别详细介绍每钟启动模式

1、standard

    standard模式是默认的启动模式,不用为配置android:launchMode属性即可,当然也可以指定值为standard。

    standard模式是所启动的Activity都是在同一个task容器栈下,不会重新创建新的task容器栈。先压入栈的Activity实例按顺序入栈底,后入栈在栈顶,处于栈的顶部Activity实例处于活动状态,其他处于非活动状态。按物理返回键,退出当前所处活动状态Activity窗口,这样就会从task容器栈中弹出,显示在手机主屏幕上,从而,有非活动状态转换成活动的状态。其次,standard容器栈可能会存在着相同的Activity实例,只有没调用一次startActivity方法,就会创建目标Activity实例对象压入task容器栈。

2、singleTop

    AndroidManifest.xml文件中launchmode属性配置singletop,那么启动实例化Activity,如果task容器栈顶存在已经激活的Activity实例,就会重用当前栈顶的Activity实例,不会再重新去实例化Activity对象。善于思考的朋友可能会问,如果要启动的目标Activity已经有实例化对象存在task容器栈里面,只是现在不处于栈顶,这样情况下,singletop启动模式会创建目标Activity实例吗?答案是肯定的。要启动的目标Activity实例正好处于栈顶,才能重用该实例,其他情况必须创建新实例。

3、singleTask

   singletask模式,特别需要注意了。启动的目标Activity实例如果已经存在task容器栈中,不管当前实例处于栈的任何位置,是栈顶也好,栈底也好,还是处于栈中间,只要目标Activity实例处于task容器栈中,都可以重用该Activity实例对象,然后,把处于该Activity实例对象上面全部Activity实例清除掉,并且,task容器栈中永远只有唯一实例对象,不会存在两个相同的实例对象。所以,如果你想你的应用不管怎么启动目标Activity,都只有唯一一个实例对象,就使用这种启动模式。

4、singleInstance

   singleInstance启动模式,简单说就是可以共享某个Activity。比如,应用1的任务容器栈中创建了MainActivity实例,应用2也要激活MainActivity,则不需要创建MainActivity实例,直接可以公用MainActivity实例。

   尤其值得注意:应用1启动MainActivity,按home键;打开应用2启动应用1的MainActivity实例。在按home键,打开应用1,这时候应用1的界面是应该是处于MainActivity界面实例。

更多相关文章

  1. Android启动脚本init.rc 2
  2. 浅谈Android开机启动速度优化(含应用程序启动速度优化)
  3. Android应用框架之应用启动过程
  4. Android四大组件之Service调优及进程保活(含Demo - Kotlin版)
  5. Android(安卓)HAL实例学习-Jollen的mokoid工程编译篇
  6. 定制一个Android的Launcher(Home)
  7. Android中SQLite应用详解
  8. Android中AVD(Android(安卓)Virtual Device)不能启动的处理方法
  9. Android中Context用法详解

随机推荐

  1. 非名校95后,拿到百度和今日头条offer,他是
  2. 职场选择,还真就不是一个人的事
  3. 快递单号查询,自动快递单号查询软件
  4. 单集群10万节点 走进腾讯云分布式调度系
  5. 中年程序员都在想什么?
  6. 从手机定位谈谈科技
  7. 【OGG】OGG简单配置双向复制(三)
  8. Python继续霸榜,上古语言Cobol重获关注,IEE
  9. 程序员跳槽全攻略
  10. 左耳朵耗子:区块链的革命性及技术概要