Learn && Live
虚度年华浮萍于世,勤学善思至死不渝
前言
Hey,欢迎阅读Connor学Android系列,这个系列记录了我的Android原理知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/stkuq,话不多说我们马上开始!
Activity启动模式
standard 标准模式
(1)每启动一次Activity就创建一个新实例
(2)谁启动的这个Activity,则该Activity就运行在其所在栈中
一个任务栈中可以有多个实例,一个Activity的多个实例也可以属于不同的任务栈
singleTop 栈顶复用模式
顾名思义,关注Activity是否位于栈顶
(1)若新Activity位于栈顶,不新建实例,无onCreate、onStart调用过程,仅调用onNewIntent方法取出当前请求的信息
(2)若新Activity不位于栈顶,新建实例
singleTask栈内复用模式
那么什么是Activity想要的任务栈呢?这里介绍Activity的taskAffinity(任务亲和性)属性
taskAffinity
Activity的属性,实际上就是为Activity分组,拥有相同taskAffinity的Activity为一组,进入同一个Activity栈,默认为应用包名。当然也可以自定义Activity的taskAffinity,不过不可与应用包名同名(这样做显然没有任何意义)。taskAffinity属性主要和singleTask启动模式或AllowTaskReparenting属性配合使用。
(1)taskAffinity + singleTask:如上所述,不再复述
(2)taskAffinity + allowTaskReparenting = “true”,这种情况也许可以将"reparenting"作为突破口,如果我们把Activity C的目标任务栈看作其生父母(C所在应用的包名),当前所在的栈看作其养父母,此时也许可以简单解释为:现有两个应用A和B,A启动了B的C,此时C在A的任务栈中,之后当B启动时,系统创建了B的任务栈,C会从A转移到B中。
singleInstance 单实例模式
拥有singleTas模式的特性,但该模式下的Activity只能单独位于一个任务栈中,若存在栈和实例均不会再新建