Activity的launchMode和任务栈小结
对Activity的launchMode的理解一直没有好好总结下,这两天系统总结下launchMode的使用方法:
Activity的launchMode属性决定了Activity和应用程序当前任务栈之间的关系。一个应用程序当前任务栈管理着应用程序的activity集合的Activity归属和Activity间的交互。
开发者想要开发的App拥有良好的交互,因此,深入对Activity的launchMode的理解能帮助我们开发性能良好和交互合理的App。
Activity的launchMode主要有四种类型:
- standard
- singleTop
- singleTask
- singleInstance
我们知道Activity的四种启动模式都是在配置文件manifest里配置,除此之外我们还能够通过制定Intent的flag參数来改变Activity的默认行为。也就是说,我们的Activity的默认四种类型的表现形式。在我们启动该Activity前,我们指定Intent的flag參数,我们能够覆盖Activity的默认表现。Intent的改变默认启动模式的常见參数有例如以下:
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_SINGLE_TOP
以下从Activity的launchMode表现的四种启动方式说起:
1.standard
standard模式是默认的启动模式。不用为Activity配置android:launchMode属性就可以。也能够显示指定为standard。
启动standard模式的Activity时候,会在任务栈的栈顶加入一个新的实例化的Activity。
点击返回键,Activity的退栈顺序就依照任务栈先进先出的结构退栈。
2.singleTop
启动singleTop模式的Activity时候,系统会查找当前任务栈栈顶元素是不是当前要启动的Activity实例的类,假设不是,会实例化一个新的类加入到栈顶;假设是,当前栈顶Activity会被复用。
点击返回键,Activity的退栈顺序就依照任务栈先进先出的结构退栈。
3.singleTop
启动singleTask模式的Activity时候,Activity会默认开启一个新的任务栈。该Activity作为根元素。假设该Activity的实例已经存在单独的任务栈,系统会调用该Activity的onNewIntent()方法,保证该Activity仅仅会存在一个实例。关于singleTask的元素退栈分两种情况:
-启动的Activity属于本应用程序Activity集合
首先定义Activity启动规则例如以下图所看到的。
当启动顺序为A->C->A->C,返回栈退栈操作为C->A->home界面,通过实际的样例能够说明,当一个任务栈里存在singleTask类型的实例。再启动该singleTask类型的Activity时候。在任务栈里该Activity实例上面的Activity都会清出任务栈,该Activity变成任务栈顶元素。
-启动的Activity不属于本应用程序应用程序集合
当启动的singleTask为另外的应用程序的Activity,假设当前后台没有任务栈存在该Activity的情况。就新建一个任务栈。该Activity为该任务栈的栈顶元素。一种特殊的情况。当后台刚好有一个任务栈存在改Activity的时候。此处该任务栈会被调到前台。
假设此时按返回键的时候,回退的过程会是例如以下:
4.singleInstance
启动singleInstance与singleTask类似,仅仅是系统不会向声明为singleInstance的任务栈加入其它的activity,通过该声明为singleInstance的Activity实例启动其它的Activity。其它Activity必须加入到其它的任务栈。也就是说声明额外singleInstance的Activity所在任务栈仅仅有它一个元素。
以下说下关于Intent的经常使用flags系统常量:
FLAG_ACTIVITY_NEW_TASK
该常量的实际效果跟上面提到的singleTask的启动的Activity不属于本应用程序的Activity集合效果一样。
FLAG_ACTIVITY_SINGLE_TOP
该常量实际效果跟singleTop效果一样。
FLAG_ACTIVITY_CLEAR_TOP
该常量相当于上面提到的singleTask的启动的Activity属于本应用程序的Activity集合效果一样。
本文个人周末动手实践小结。可能会有理解偏差错误的地方,欢迎大家指正,一起共同进步。
转载请注明出处:http://blog.csdn.net/johnnyz1234/article/details/47209957
Activity的launchMode和任务栈小结的更多相关文章
- Android Activity 启动模式和任务栈
在了解了基本的Activity的生命周期后,我们能够很好的在一个Activity上面做相关的业务.但是这是不够的,因为Android通过任务栈来保存整个APP的Activity,合理的调度任务栈才能够 ...
- activity的启动模式和栈管理
在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的. Intent ...
- android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode
转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...
- Activity之launchMode理解
对于Activity中的四个lauchMode[standard(默认).singleTop.singleTask.singleInstance]的介绍网上已经有大把的文章了,但是在实际应用开发时,对 ...
- Activity的LaunchMode情景思考
此链接:http://blog.csdn.net/xiaodongrush/article/details/28597855 1. 有哪几种类型?分别有什么用? http://developer.an ...
- Activity的LaunchMode应用场景思考
本文链接:http://blog.csdn.net/xiaodongrush/article/details/28597855 1. 有哪几种类型?分别有什么用? http://developer ...
- Activity启动清空原任务栈
就是 启动新的activity 但是把之前所有的activity 都finish掉 而且所有的activity 都是在一个栈中 Intent intent = new Intent();intent ...
- LeetCode Monotone Stack Summary 单调栈小结
话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...
- 细说Activity与Task(任务栈)
Task概要: task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下, 一个Activity启动另一个Ac ...
随机推荐
- CSS3中的transition
W3C标准中对CSS3的transition是这样描述的: CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击,获得焦点,被点击或对元素任何改变中触发, ...
- 企业级URL检测脚本
#!/bin/bash #检查web url 是否正常 . /etc/init.d/functions #引用系统函数库 #判断传参个数是否为一个 function usage(){ echo $&q ...
- 实验了一下对于struct引用的成员的改动
今天写代码的时候,不确定struct用引用传递给函数的时候,他的成员在函数里面改变的时候,是否能影响到外面. 实验了一下 #include <stdio.h> #include <s ...
- 使用Openfire和Asmack实现IM功能,常常出现“Thread already started”的错误
近期使用Openfire和Asmack实现Android端的IM功能,可是实际使用的过程中,常常出现"java.lang.IllegalThreadStateException:Thread ...
- Hadoop Serialization -- hadoop序列化具体解释 (2)【Text,BytesWritable,NullWritable】
回想: 回想序列化,事实上原书的结构非常清晰,我截图给出书中的章节结构: 序列化最基本的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataO ...
- C++友元(Friend)简介
相对Java而言,友元是C++中特有的一种元素,再加上<C++ Primer>也并没有太具体的样例,所以刚接触这个概念的时候懵了非常久,即是自己总结一下,也希望能帮到大家,以下来讲讲友元的 ...
- IIS访问站点,出现connection refused
排查后,发现是因为使用了代理导致的. 需要设置 Don't use the proxy server for local addresses.
- Format operator
The argument of write has to be a string, so if we want to put other values in a file, we have to co ...
- 数位$dp$
数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...
- POJ 3668 枚举?
枚举两点,算一下斜率 sort一遍 判个重 输出解 25行 搞定- //By SiriusRen #include <cmath> #include <cstdio> #inc ...