思考一下activity的启动模式
在android里,有4种activity的启动模式。分别为:“standard” (默认) “singleTop” “singleTask” “singleInstance”
比方启动一个应用,那么Android就创建了一个Task。然后启动这个应用的入口Activity。那在它的界面上调用其它的Activity也仅仅是在这个task里面。
那假设在多个task中共享一个Activity的话怎么办呢。举个例来说,假设开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时。显示的就是刚才的地图,实际上是同一个Activity。实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中仅仅有这一个Activity。不同应用的intent都由这个Activity接收和展示,这样就做到了共享。
当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,假设按下了返回键,则无效
它们主要有例如以下不同:
1. 怎样决定所属task
“standard”和”singleTop”的activity的目标task。和收到的Intent的发送者在同一个task内,除非intent包含參数FLAG_ACTIVITY_NEW_TASK。
假设提供了FLAG_ACTIVITY_NEW_TASK參数。会启动到别的task里。
“singleTask”和”singleInstance”总是把activity作为一个task的根元素。他们不会被启动到一个其它task里。
2. 是否同意多个实例
“standard”和”singleTop”能够被实例化多次,而且存在于不同的task中,且一个task能够包含一个activity的多个实例;
“singleTask”和”singleInstance”则限制仅仅生成一个实例,而且是task的根元素。
singleTop要求假设创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。
3. 是否同意其他activity存在于本task内
“singleInstance”独占一个task,其他activity不能存在那个task里;假设它启动了一个新的activity,无论新的activity的launch mode 怎样,新的activity都将会到别的task里执行(如同加了FLAG_ACTIVITY_NEW_TASK參数)。
而另外三种模式,则能够和其他activity共存。
4. 是否每次都生成新实例
“standard”对于没一个启动Intent都会生成一个activity的新实例。
“singleTop”的activity假设在task的栈顶的话,则不生成新的该activity的实例。直接使用栈顶的实例,否则,生成该activity的实例。
比方如今task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent。假设D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。
假设D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D
假设这时候给B发Intent的话,无论B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例。栈状态变为A-B-C-D-B。
“singleInstance”是其所在栈的唯一activity,它会每次都被重用。
“singleTask”假设在栈顶。则接受intent,否则,该intent会被丢弃。可是该task仍会回到前台。
当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法
假设收到intent生成一个activity实例,那么用户能够通过back键回到上一个状态。假设是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。
思考一下activity的启动模式的更多相关文章
- 关于activity的启动模式
在Android中每个界面都是一个Activity ,界面的切换实际上是对不同Activity实例化的过程.而启动模式就决定Activity启动运行方式. 1.设置方式它是在主配置文件中,Activi ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- android Activity的启动模式与flag的见解
最近做一个安卓项目,想要实现的效果就是:当打开一个按钮的时候,启动了一个A功能,当用户返回到桌面再继续进去的时候,不过之前在哪个Activity,都会先跳转到A功能的那个界面,当用户点击返回的时候,再 ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
- Activity的启动模式(android:launchMode)
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- 4种activity的启动模式
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- Activity的启动模式及回退栈的概念
Activity的启动模式 standard 正常模式 在创建一个新的activity的时候,直接在栈顶创建一个新的activity singleTop 顶部单个 在创建一个新的activity的时候 ...
- Activity 的启动模式
好久没用过那几种activity的启动模式了,如今看到singletop竟然傻了眼,完全忘记了这几种启动模式的区别!隧将两年前的总结翻出来,通读一遍那晦涩难懂的记录,又理解了一遍,在以前记录的基础上, ...
- Activity LauchMode启动模式(转载)
转载于:http://www.cnblogs.com/plokmju/p/android_ActivityLauncherMode.html 在一个Android应用中,不可避免的会包含多个Activ ...
随机推荐
- NOIp2018模拟赛三十八
爆〇啦~ A题C题不会写,B题头铁写正解: 随手过拍很自信,出分一看挂成零. 若要问我为什么?gtmdsubtask! 神tm就一个subtask要么0分要么100,结果我预处理少了一点当场去世 难受 ...
- 紫书 习题 11-10 UVa 12264 (二分答案+最大流)
书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最 ...
- 仿百度排列图片预览插件-Simple Lightbox
很久以前遇到过这样的一个面试题,要求手写代码,实现百度图片的排列预览,并且可以左右点击查看下一张照片,当时没有做出来,这个问题也就一直放在了脑后,工作之后,遇到这样的需求之后,第一反应想到的是在源码网 ...
- thymeleaf 常用标签
1.th:field th:field="*{user.sex}" 此标签会自动填充数据,比如用户的性别 user.sex 如果不为空,则会自动勾选上 2.th:each=&qu ...
- Samurai's Stroke
题目链接 题意: 一个长度为L的木棍,有n个支点支撑,每一个点是一个int数.表示距离木棍左端点的距离.求在那些位置将木棍劈开能够使得至少有一个木棍掉下去,输出这些位置的长度 3 ≤ l ≤ 109; ...
- 继续过Hard题目.周五
# Title Editorial Acceptance Difficulty Frequency . 65 Valid Number 12.6% Hard . 126 Word ...
- [React] React.PureComponent
React.PureComponent is similar to React.Component. The difference between them is that React.Compone ...
- Android 获取麦克风的音量(分贝)
基础知识 度量声音强度.大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位.计算公式例如以下: 分子是測量值的声压,分母是參考值的声压(20微帕.人类所能听到的最小声压) ...
- 浅析为什么 char 类型的范围是 : -128~+127
在 C 语言中. signed char 类型的范围为 -128~127,每本教科书上也这么写.可是没有哪一本书上(包含老师)也不会给你为什么是 -128~127,这个问题貌似看起来也非常easyea ...
- NSTimer解除循环引用
NSTimer作为一个经常使用的类,却有一个最大的弊病,就是会强引用target.造成调用timer很麻烦.稍有不慎就造成内存泄漏. 下面就是为解决问题做的封装. 直接上代码: #import < ...