Activity的启动模式详解
Activity的启动模式详解
Activity有四种载入模式:standard(默认), singleTop, singleTask和 singleInstance。
(1).standard(默认):Activity的默认载入方法。
即使某个要启动的Activity在Task栈中已经存在,相同会新创建一个实例压入栈中。也就是说:该模式的Activity。仅仅要是启动,都会创建一个新的实例压入栈中。
比如:
如今栈的情况为:A B C D。在D这个Activity中通过Intent跳转到D本身,那么如今的栈情况为: A B C D D 。
此时假设栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时假设依次按返回键。D D C B A将会依次弹出栈而显示在界面上。例如以下图所看到的:
(2).singleTop模式:假设某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时:再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。
假设该Activity不位于栈顶的时候。通过Intent跳转到本身这个Activity,则会创建一个新的实例压入栈中。
比如:
如今栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D。此时栈的情况依旧为:A B C D。
可是假设此时B的模式也是singleTop,D跳转到B,由于此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。例如以下图:
(3).singleTask模式:假设某个Activity是singleTask模式,那么Task栈中将会仅仅有一个该Activity的实例。该Activity之上的全部的Activity实例都将会被销毁。
比如:如今栈的情况为:A B C D。B的Launch mode为singleTask。此时D通过Intent跳转到B。则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。
例如以下图:
(4).singleInstance模式:将Activity压入一个新建的任务栈中。也就是说:将要被启动的新的Activity将会被压入一个新建的任务栈中。
比如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance。则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。
Task栈2的情况为:D。此时屏幕界面显示D的内容,假设这时D又通过Intent跳转到D。则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。
而假设D跳转到C,则栈1的情况变成了:A B C C,由于C的Launch mode为standard。此时假设再按返回键,则栈1变成:A B C。也就是说如今界面还显示C的内容,不是D。
例如以下图:
注:
singleTask模式和singleInstance模式差别:
singleTask模式的activity同意其他activity成为task中的一部分 。而且它通常在task栈的根部。其他activity(必须是standard模式和singleTop模式的activity)能够载入到这个栈上。还有一方面,singleInstance模式的activity不同意不论什么其他activity载入到这个task栈上。它是这个task中唯一的activity。假设它启动还有一个activity,那个activity会被指引到不同的task中,这个行为就像在intent中用FLAG_ACTIVITY_NEW_TASK标记一样。
(通常来说。manifest中用singleTask启动模式和在intent中用FLAG_ACTIVITY_NEW_TASK标记的行为是一样的)。
总的来说:singleTask模式能够同意和别的Activity在一个栈中。在它之上的Activity都将会被销毁。而singleInstance模式的Activity是单独在一个Task中。
Activity的启动模式详解的更多相关文章
- Android Activity的4种启动模式详解(示例)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5233269.html 先介绍下Android对Activity的管理,Android采用Task来管理多个A ...
- Activity的四种启动模式详解
Activity的启动模式在清单文件AndroidManifest.xml中的Activity属性中进行设置: 如:<activity android:name=".MainActiv ...
- Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...
- Android开发——Activity启动模式详解
1. Activity的启动模式 本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52054893 1.1 Standard标 ...
- Activity的启动模式全解standard,singleTop,singleTask,singleInstance
在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中, 有两种可能,进入启动task中,进入指定taskAffinity的 ...
- Android Activity 启动模式详解
最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了 ...
- UEFI与 Legacy BIOS两种启动模式详解
(1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
- Activity的四种加载模式详解:
先来看看总结图: 模式详解: standard模式: 标准启动模式,也是activity的默认启动模式.在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity ...
随机推荐
- 简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析【转】
转自:https://blog.csdn.net/sctq8888/article/details/7398776 转载自:http://hi.baidu.com/deep_pro/blog/item ...
- NET调用Com组件事例
http://blog.csdn.net/shizhiyingnj/article/details/1507948 在程序设计中,往往通过键盘的某个按键来完成相关操作! 下面就来说明如何实现: 1.引 ...
- shell升级
对/sbin/nologin的理解 系统账号的shell使用 /sbin/nologin ,此时无法登陆系统,即使给了密码也不行. 所谓“无法登陆”指的仅是这个用户无法使用bash或其他she ...
- NOIp 2018 普及组
T1标题统计 传送门 题目描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字 符数时,空格和换行符不计算在内. ...
- SqlServer 批量备份
-- 实现方式1:使用游标 DECLARE @FileName VARCHAR(200), @CurrentTime VARCHAR(50), @DBName VARCHAR(100), @SQL V ...
- zabbix 自动发现
转自:https://blog.csdn.net/yyy72999/article/details/76065374 zabbix自动发现/zabbix自动发现规则 置顶2017年07月25日 14: ...
- CSS------让ul中高度不同的li底部对齐
如图: 代码:(需要将li中vertical-align属性设置为bottom) <ul style="margin-top:50px"> <li style=& ...
- 循序渐进学.Net Core Web Api开发系列【16】:应用安全续-加密与解密
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 应用安全除 ...
- eclipse中的maven build、maven clean、maven install和maven test的区别
eclipse中的maven build.maven clean.maven install和maven test的区别 https://www.cnblogs.com/Marydon20170307 ...
- 基于图文界面的蓝牙扫描工具btscanner
基于图文界面的蓝牙扫描工具btscanner btscanner是Kali Linux内置的一款蓝牙扫描工具.它提供图文界面,更便于渗透测试人员查看扫描信息.该工具会自动使用主机所有的蓝牙接口,并 ...