zoukankan      html  css  js  c++  java
  • Android Activity的启动模式

    Android系统采用任务栈的方式来管理Activity实例。

    栈是后进先出的数据结构。通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置。用户操作的永远都是栈顶的Activity。

    Activity可以层叠摆放,每启动一个新的Activity都会覆盖在原Activity之上(入栈),单击返回按钮,最上面的Activity会被销毁,下面的Activity重新显示。

    Activity有4种启动模式:

    1、standard模式

    上面介绍的模式就是standard模式。standard模式是Activity默认的启动模式。每启动一个Activity就在栈顶创建一个新的实例。

    闹钟通常采用此种模式。

    2、singleTop模式

    如果有时候satndard模式并不合理,比如当前Activity已处于栈顶,再次启动此Activity会重新创建实例,不会直接复用。

    singleTop顾名思义,栈顶单例。

    将某个Activity的启动模式设置为singleTop,启动此Activity时,会先检查栈顶是否是此Activity的实例,如果是,则直接复用,如果不是,才创建实例。

    浏览器的书签通常采用此种模式。

    3、singleTask模式

    singleTop模式有一定的缺陷,当栈中有此Activity的实例,但未处于栈顶时,仍会创建实例,栈中可能会存在此Activity的多个实例。

    singleTask,顾名思义,任务栈中只有一个实例。

    启动某个Activity时,会先检查任务栈中是否有该Activity的实例,有就直接复用(把前面所有的Activity出栈),没有才创建并入栈。

    浏览器的主界面通常采用此模式。

    4、singleInstance模式

    会启动一个新的任务栈来管理当前程序中singleInstance模式启动的Activity,在Android系统中,该Activity只有一个实例。

    这种模式主要是为了,在不同程序间共享同一个Activity实例。

    启动Activity时,若Android系统中不存在该Activity的实例,则创建并入栈;若已存在,不管此实例位于哪个程序的哪个任务栈中,系统都会把该任务栈转移到前台,显示该实例。

    来电界面通常使用此模式。

    可在AndroidManifest.xml文件对应的 <activity />元素中用 launchMode属性 指定启动模式:

    1  <activity
    2             android:name=".Activity2"
    3             android:label="@string/title_activity_2"
    4             android:theme="@style/AppTheme.NoActionBar"
    5             android:launchMode="singleTask">   <!-- 指定此Activity的启动模式-->
    6 </activity>

    缺省时默认为standard模式。

  • 相关阅读:
    SQL语句在数据库中可以执行在mybatis执行不了
    spring_08aop原理及案例
    spring_07使用spring的特殊bean、完成分散配置
    spring_06装配bean_2
    spring_05装配bean
    spring_03ApplicationContext三种经常用到的实现
    spring_04bean的生命周期
    spring_02工具及接口案例
    深入理解Ribbon之源码解析
    深入理解Feign之源码解析
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/10873287.html
Copyright © 2011-2022 走看看