1.启动任务栈
第一种,动作设置为“android.intent.action.MAIN”,类别设置为“android.intent.category.LAUNCHER”,
可以使这个ACT(activity)实例称为一个任务栈的入口,拥有这种类型的intent-filter的ACT类型的图
表和名字也会显示在application launcher中。

如下

 <activity android:name="SoundRecorder"
android:launchMode="singleTop"
android:configChanges="orientation|screenSize|keyboardHidden|mnc|mcc"
android:screenOrientation="nosensor"
android:clearTaskOnLaunch="false"
android:theme="@style/SoundRecorderTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

第二种,即是采用用“singleInstance”模式,另外开个一个唯一ACT的栈.

第三种, 在Intent中加入了“FLAG_ACTIVITY_NEW_TASK”。

当传递给startActivity()的Intent对象包含FLAG_ACTIVITY_NEW_TASK标记时,系统会为需要启动的 activity寻找与当前activity不同的task。如果要启动的activity的affinity属性与当前所有的task的 affinity属性都不相同,系统会新建一个带那个affinity属性的task,并将要启动的activity压到新建的task栈中;否则将 activity压入那个affinity属性相同的栈中。

提示:如果“singleInstance”模式同时还加上上面的类型,则当前ACT也是一个单独ACT的任务栈,而应用其他ACT会组成另外一个任务栈

2.启动模式
<activity>标签的launchMode属性可以设置为四种不同的模式:
“standard” :(默认模式)反复创建新实例,如A-B-A-C-D-B-A…依次随便加
“singleTop” : 避免出现类似A-B-C-D-D…,如D采用"singleTop",则是A-B-C-D
“singleTask”: 如A采用"singleTask",则在“standard”中类似A-B-C-D-A任务栈,在“singleTask”只会剩下A,BCD都会被回收
“singleInstance” : 此模式你另外开个一个任务栈,且单独只有一个ACT.主要用于多个应用共享同一个activity。

提示:如果该Activity已经启动了,再次调用该activity就调用OnNewIntent。

3.清理任务栈
默认:如果一个任务栈在很长的一段时间都被用户保持在后台的,那么系统就会将这个任务栈中除了根ACT以外的
其它所有ACT全部清除掉。当用户再将任务栈切换到前台,则只能显示根activity了。
1)alwaysRetainTaskState属性
如果将根ACT的alwaysRetainTaskState属性设置为“true”,则即便一个任务栈在很长的一段时间都被用户
保持在后台的,系统也不会对这个任务栈进行清理。
2)clearTaskOnLaunch属性
如果将根ACT的clearTaskOnLaunch属性设置为“true”,那么只有这个任务栈切换到了后台,那么系统就会
将这个任务栈中除了根ACT以外的其它所有ACT全部清除掉。即和alwaysRetainTaskState的行为完全相反。
3) finishOnTaskLaunch属性
这个属性的行为类似于clearTaskOnLaunch,但是此属性作用于单个的ACT对象,而不是整个任务栈。当这个
任务栈切换到了后台,这个属性可以使任务栈清理包括根ACT在内的任何ACT对象。

4.还复杂点可以加入亲属关系taskAffinity

总结:简单的说,即是开一个(或几个)任务栈,在每个任务栈上添加ACT,遇到“singleTask”的则回到之前存在的ACT,把夹在中间的ACT全部回收

最新文章

  1. 第二章 搭建Android开发环境
  2. DHCP服务器原理
  3. Linux I2C工具查看配置I2C设备【转】
  4. [Android开发]- MVC的架构实现登录模块-1
  5. CODEVS1047 邮票面值设计
  6. 合并k个已排序的链表 分类: leetcode 算法 2015-07-09 17:43 3人阅读 评论(0) 收藏
  7. select * from 的一些心得
  8. 剑指Offer——知识点储备-网络基础
  9. (爬虫)requests库
  10. requests session operation
  11. P3957 跳房子
  12. Java的自动装箱和拆箱
  13. 最近找工作,有招JAVA开发的可以联系我,如果不嫌弃我2年前用C,也可以联系我
  14. HikariCP和spring-boot-devtools了解
  15. 第七十五课 图的遍历(DFS)
  16. Python高级网络编程系列之第一篇
  17. NFS及RPC讲解
  18. 转:Ogre源码剖析1
  19. openstack neutron 二/三层网络实现
  20. Java提供了哪些IO方式?IO, BIO, NIO, AIO是什么?

热门文章

  1. Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆
  2. 威联通 移动硬盘路径 /share/USBDisk1
  3. tr---对来自标准输入的字符进行替换、压缩和删除。
  4. request中文乱码解决
  5. Spring : 征服数据库(一)
  6. Spring MVC : Java模板引擎 Thymeleaf (三)
  7. android webview 报 [ERROR:in_process_view_renderer.cc(189)] Failed to request GL process. Deadlock likely: 0 问题
  8. javaweb二
  9. C/C++(数据结构链表的实现)
  10. ssh-keygen &amp;&amp; ssh-copy-id 生成管理传输秘钥