启动模式与任务栈

1.Activity的四种启动模式

standard:默认,不复用,每次创建新实例。
singleTop:栈顶复用,检查栈顶,如果不是要启动的Activity,创建新实例;如果是,就复用。singleTask:栈中复用,检查任务栈,如果没有要启动的Activity,创建新实例;如果有,就把该Activity上方的其他Activity全部推出任务栈,复用该Activity。
singleInstance:单例模式,独享一个任务栈,且只有一个任务栈,只有一个Activity实例。


启动模式说明

问题1:singleTask模式如果不复用Activity,会新建一个Task放入Actvity吗?
只是平时我们没有去更改Activity的taskAffinity属性(默认为包名),那么Activity创建的时候,就放在app同一个任务栈里面了,所以效果等同于Standard模式。假如重新改了taskAffinity则会新建一个任务栈。

问题2:Activity的TaskAffinity属性起什么作用?
仅对启动模式是SingleTask和SingleInstance类型的Activity生效。用于对Task进行分组,假如app里面的ActivityA设置一个新的TaskAffinity(不使用app包名做为默认值),那么以new task方式启动该ActivityA后,home到桌面,从最近打开的任务栈里面可以看到两个不同的任务栈界面,但都运行在同一个app进程里面。

问题3:Activity描述里面的launchMode启动模式和intent里面的Flag启动模式以哪个为准?
如果两个 Activity 均定义 Activity B 应该如何与任务栈关联,则 Activity A 的请求(如 Intent 中所定义)优先级要高于 Activity B 的请求(如其清单文件中所定义)

2.Activity任务栈

任务栈

任务的默认行为总结:任务栈中的 Activity 永远不会重新排列,仅推入和弹出堆栈。当 Activity A 启动 Activity B 时,Activity A 将会停止,但系统会保留其状态(例如,滚动位置和已输入表单中的文本)。如果用户按“返回”按钮,则当前 Activity 会从堆栈弹出并被销毁。 堆栈中的前一个 Activity 恢复执行。销毁 Activity 时,系统不会保留该 Activity 的状态。
系统需要回收内存资源时,可能会完全销毁 Activity;或者进程崩溃后,Activity也被销毁了,进程重启,会重建Activity。在 Activity 被销毁且必须重建时,必须主动使用回调方法onSaveInstanceState()保留 Activity 的状态。
无论 Activity 是在新任务中启动,还是在与启动 Activity 相同的任务中启动,用户按“返回”按钮始终会转到前一个 Activity。 但是,如果启动指定 singleTask 启动模式的 Activity,则当某后台任务中存在该 Activity 的实例时,整个任务都会转移到前台。此时,返回栈包括上移到堆栈顶部的任务中的所有 Activity。

启动模式为“singleTask”的 Activity 添加到返回栈。 如果 Activity 已经是某个拥有自己的返回栈的后台任务的一部分,则整个返回栈也会上移到当前任务的顶部。

问题1:Activity在什么情况下会被销毁重建?
1.Activity处于后台,此时系统资源紧张,会被回收,但任务栈的状态保持不变,用于后续恢复重建。此时的进程是没有被杀死的。
2.Activity横竖屏切换会销毁重建。

问题2:Activity如果崩溃了,系统怎么处理?
比如一个app打开了四个Activity,此时任务栈有四个Activity,顺序为A->B->C->D。现在D崩溃了,进程也挂了。但任务栈没变成了A->B->C(D因为没调用saveInstanceState())。系统会重新去创建C,C在创建的时候就会重新拉起一个新进程。之后从C返回B的时候,B会重新创建,类似的流程A也会发生。

问题3:任务栈task里面的Activity都属于一个进程吗?
任务栈task里面的Activity可以是多个进程的。比如某个进程A里面加载了进程B的某个Activity,那么只存在进程A的任务栈,进程A和进程B都在运行中。

问题4:系统会清理任务栈吗?
如果用户长时间离开任务,则系统会清除所有 Activity 的任务,根 Activity 除外。 当用户再次返回到任务时,仅恢复根 Activity。系统这样做的原因是,经过很长一段时间后,用户可能已经放弃之前执行的操作,返回到任务是要开始执行新的操作。您可以使用下列几个 Activity 属性修改此行为:alwaysRetainTaskState如果在任务的根 Activity 中将此属性设置为 "true",则不会发生刚才所述的默认行为。

问题5:内存不足时,到底是 Activity 被回收呢,还是进程被杀死呢?
Activity 被回收了,而且进程被杀死了,而且一般情况下该进程是后台进程。

问题6:Activity的onCreate(Bundle savedInstanceState)参数什么时候不为空?
当Activity被回收(不管进程有没有被杀死),下次重建的时候就会把上次调用saveInstance()方法保存的内容传递到onCreate的savedInstanceState参数里。用于Activity的重建。这里的重建是跟进程无关的,即使因为崩溃进程重启了,那么重建的Activity还是能收到savedInstanceState参数。特别注意正常退出Activity再打开该Activity,savedInstanceState是空。只有异常情况(包括横竖屏切换,不保留后台活动,崩溃或者被系统强杀进程回收资源)需要重建才会传入有效的savedInstanceState内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容