文档章节

Android启动模式

JasonZhao
 JasonZhao
发布于 2016/05/17 18:58
字数 843
阅读 62
收藏 2

github地址:https://github.com/xiaoliang0227/android_launchMode_demo

Android有四种启动模式,分别为standard、singleTop、singleInstance、singleTask。设置启动模式可以在AndroidManifest.xml中设置Activity的launchMode属性,Activity的默认启动模式为standard。所以,如果想设置Activity为standard模式可以不用给launchMode设置属性值。

下面分别介绍下四种启动模式

standard模式:

standard模式为Activity的默认启动模式,该模式下所有启动的Activity都在同一个task容器栈中,只要每次调用startActivity等相关方法都会创建一个Activity的实例,所以同一个task容器栈中可能存在着相同的Activity实例。

singleTop模式:

设置Activity的启动模式为singleTop可以通过配置AndroidManifest.xml文件中的Activity的launchMode属性值来实现。

如字面意思,task 容器栈顶保持一个Activity的实例,如果某个Activity已经处于task容器栈顶,则下次创建Activity的实例时就会重用处于task容器栈顶的Activity实例。但是,如果Activity的实例并非在task容器栈的栈顶位置,则会重新创建新的Activity的实例,该模式在task容器栈中可能存在着相同的Activity实例。

singleTask模式:

singleTask模式是比较狠的模式,如果设置了Activity的launchMode为singleTask,则会把Activity实例对象上面的所有实例全部清除掉,并且,task容器栈中永远只保留唯一一个实例对象。

如果已经有了Activity的实例在task 容器栈中,不论Activity的实例是在task容器栈的任何位置,都会被重用。所以,如果你的应用无论如何启动目标Activity,都要保证只有一个唯一的Activity实例,则可以使用该模式。

singleInstance模式:

       singleInstance模式,简单的说就是可以共享某个Activity。比如说,如果应用1的task容器栈中已经创建AActivity的实例,应用2如果想要调用AActivity则不需要重新创建AActivity的实例,直接可以共用AActivity的实例。

  使用到命令如下,不知道如何使用的请Google

  • adb shell
  • dumpsys activity activities

standard模式跳转实例:

MainActivity – StandardModeActivity – SingleTopModeActivity – StandardModeActivity – SingleTaskModeActivity – StandardModeActivity

 

Activities=[

ActivityRecord{dc3115c u0 com.zyl.demo.launchmode/.activity.MainActivity t37},

ActivityRecord{281ef31d u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t37},

ActivityRecord{1ea68d5 u0 com.zyl.demo.launchmode/.activity.SingleTopModeActivity t37},

ActivityRecord{24f679b6 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t37},

ActivityRecord{c16c753 u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t37},

ActivityRecord{235a6dbc u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t37}]

 

singleTop模式跳转实例:

MainActivity – StandardModeActivity – SingleTopModeActivity – StandardModeActivity – SingleTaskModeActivity – SingleTopModeActivity – SingleTopModeActivity

 

Activities=[

ActivityRecord{19f60dab u0 com.zyl.demo.launchmode/.activity.MainActivity t38},

ActivityRecord{1566727f u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t38},

ActivityRecord{15b23277 u0 com.zyl.demo.launchmode/.activity.SingleTopModeActivity t38},

ActivityRecord{11291550 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t38},

ActivityRecord{9c32b05 u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t38},

以下部分被重用

ActivityRecord{2bab27b2 u0 com.zyl.demo.launchmode/.activity.SingleTopModeActivity t38}]

 

singleTask模式跳转实例:

 

MainActivity—SingleTaskModeActivity—StandardModeActivity—StandardModeActivity—SingleTaskActivity

 

Activities=[

ActivityRecord{149cb473 u0 com.zyl.demo.launchmode/.activity.MainActivity t35},

以下部分被重用

ActivityRecord{2bdeacf4 u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t35},

以下部分被清除掉

ActivityRecord{1ddba651 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t35},

ActivityRecord{3edad97 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t35}]

ActivityRecord{2bdeacf4 u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t35}]

 

 

MainActivity – StandardModeActivity – StandardModeActivity – StandardModeActivity – SingleTaskModeActivity – StandardModeActivity – StandardModeActivity -- SingleTaskModeActivity

 

Activities=[

ActivityRecord{2bf38438 u0 com.zyl.demo.launchmode/.activity.MainActivity t36},

ActivityRecord{ed8c94e u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t36},

ActivityRecord{28c0b426 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t36},

ActivityRecord{24263403 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t36},

 

以下部分被重用

ActivityRecord{2048d3ac u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t36},

以下部分被清除掉

ActivityRecord{308226ca u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t36},

ActivityRecord{10c522 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t36}]

ActivityRecord{2048d3ac u0 com.zyl.demo.launchmode/.activity.SingleTaskModeActivity t36}]

 

singleInstance模式跳转实例:

 

MainActivity – StandardModeActivity – SingleInstanceActivity – StandarModeActivity – SingleTopModeActivity

 

Task id:#39

Activities=[

ActivityRecord{2361f6d3 u0 com.zyl.demo.launchmode/.activity.MainActivity t39},

ActivityRecord{1b8681e6 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t39},

以下Activity实例没有

SingleInstanceActivity

ActivityRecord{233b107 u0 com.zyl.demo.launchmode/.activity.StandardModeActivity t39},

ActivityRecord{1d3013cc u0 com.zyl.demo.launchmode/.activity.SingleTopModeActivity t39}]

 

Task id:#40

Activities=[

ActivityRecord{2229e7be u0 com.zyl.demo.launchmode/.activity.SingleInstanceModeActivity t40}]

© 著作权归作者所有

共有 人打赏支持
JasonZhao
粉丝 1
博文 35
码字总数 12913
作品 0
浦东
技术主管
私信 提问
Android中Activity启动模式详解

 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。   Android总Activity的启动...

带梦想一7飞
2013/05/23
0
0
AndroidManifest.xml文件详解(activity)(三)

android:launchMode 这个属性定义了应该如何启动Activity的一个指令。有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用来决定被调用Activity在处理Intent对...

长平狐
2012/10/16
91
0
Android知识点回顾之Activity基础

Activity生命周期 Activity的生命周期包括onCreate(),onRestart(),onStart(),onResume(),onPause(),onStop(),onDestroy()。其相互转化的过程如下图所示。左边的图是单个Activity的生命周期回...

星泉毅
2017/11/19
0
0
Activity的四种加载方式

配置activity时可指定android:launchMode属性,该属性用于配置改Activity的启动模式。该属性支持以下4个属性值。 standard:标准模式,默认的加载模式 singleTop:Task栈顶单例模式 singleTa...

dailei1021
2015/11/21
0
0
Android中Activity启动模式详解

Android中Activity启动模式详解   在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方...

大凉龙雀
2013/05/25
0
1

没有更多内容

加载失败,请刷新页面

加载更多

开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
28分钟前
0
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
28分钟前
0
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
45分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
49分钟前
2
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部