您的位置:首页 > 其它

Activity启动模式实验

2016-08-09 19:14 141 查看

Activity启动模式实验

这一节的东西真的得多看多想多试验…

2个应用A与B,都各有3个Activity 分别为A1 A2 A3, B1 B2 B3 同时重写B中Activity的OnDestroy()方法,以此判断B中Activity状态。

standard 默认启动模式

特点:每次这个activity都会重新实例化。

1个应用 A

动作task状态界面显示
打开 A1A1A1
打开 A2A2 A1A2
打开 A1A1 A2 A1A1
打开 A1A1 A1 A2 A1A1
返回键A1 A2 A1A1
返回键A2 A1A2
返回键A1A1
返回键主界面

2个应用 A B

动作A task状态B task状态返回栈状态界面显示
打开A1A1 前台A1A1
打开A2A2 A1 前台A2 A1A2
打开A1A1 A2 A1 前台A1 A2 A1A1
打开B2B2 A1 A2 A1 前台B2 A1 A2 A1B2
打开B3B3 B2 A1 A2 A1 前台B3 B2 A1 A2 A1B3
打开A2A2 B3 B2 A1 A2 A1 前台A2 B3 B2 A1 A2 A1A2
返回键B3 B2 A1 A2 A1 前台B3 B2 A1 A2 A1B3
返回键B2 A1 A2 A1 前台B2 A1 A2 A1B2
返回键A1 A2 A1 前台A1 A2 A1A1
返回键A2 A1 前台A2 A1A2
返回键A1 前台A1A1
返回键主界面

singleTop 模式

特点:当且仅当要打开的这个activity处于前台时(或返回栈的顶部 既 可见),才不重建,其他情况仍然重新实例化。

一个应用 A

动作task状态界面显示
打开 A1A1A1
打开 A2A2 A1A2
打开 A1A1 A2 A1A1
打开 A1A1 A2 A1A1
返回键A2 A1A2
返回键A1A1
返回键主界面

两个应用类似的



singleTask 模式

特点:同一时刻,一个activity只会存在一个实例,既 只要这个activity的实例存在,那么就会把这个activity所在的task 置为前台,并且在这个task中会把这个activity之前的activity杀死 以保证其在前台显示。

若不存在这个activity实例,则会新建一个task,并把此activity作为根放进去。(这里有点问题,如果是同一个应用的话,比如打开A1 A2 A3,是会放在一个task中呢,还是放在3个task中呢?我认为的是A1 A2 A3处于同一个返回栈,也处于同一个task)

一个应用 A

动作task状态界面显示
打开 A1A1A1
打开 A2A2 A1A2
打开 A3A3 A2 A1A3
打开 A2A2 A1A2
打开 A1A1A1
返回键主界面

两个应用 A B

注意第二次打开A2的时候

动作A task状态B task状态返回栈状态界面显示
打开 A1A1 前台A1A1
打开 A2A2 A1 前台A2 A1A2
打开 A3A3 A2 A1 前台A3 A2 A1A3
Home键A3 A2 A1 后台主界面
打开 B1A3 A2 A1 后台B1 前台B1B1
打开 B2A3 A2 A1 后台B2 B1 前台B2 B1B2
打开 B3A3 A2 A1 后台B3 B2 B1 前台B3 B2 B1B3
打开 A2A2 A1 前台B3 B2 B1 后台(A2 A1) (B3 B2 B1)A2
返回键A1 前台B3 B2 B1 后台(A1) (B3 B2 B1)A1
返回键B3 B2 B1 前台B3 B2 B1B3
返回键B2 B1 前台B2 B1B2
返回键B1 前台B1B1
返回键主界面主界面

singleInstance 模式

一个应用 A

在task状态中一个括号代表一个task,如果括号中有可见,那么这个task就是处于前台。其他的处于后台。

动作task状态界面显示
打开 A1A1 可见A1
打开 A2(A2 可见)(A1)A2
打开 A3(A3 可见)(A2)(A1)A3
打开 A2(A2 可见)(A3) (A2)(A1)A2
返回键(A3 可见)(A2)(A1)A3
返回键(A2 可见)(A1)A2
返回键(A1 可见)A1
返回键主界面

两个应用 A B

动作task状态返回栈状态界面显示
打开 A1A1A1A1
打开 A2(A2 可见) (A1)(A2)(A1)A2
打开 B2(B2 可见) (A2)(A1)(B2)(A2)(A1)B2
Home键(B2)(A2)(A1)主屏幕
打开 B1(B1 可见)(B2)(A2)(A1)B1B1
打开 B2(B1)(B2可见) (A2)(A1)(B1)(B2)B2
返回键(B1可见) (A2)(A1)B1B1
返回键(A2)(A1)主界面
singleInstance模式会启动一个新的返回栈来管理这些活动。假设我们有应用中有一个activity是想可以让其他程序调用,并且我们想实现其他应用和我们的应用可以共享这个活动的实例,用前三种启动模式是实现不了的,因为每个应用都会有自己的返回栈,同一个activity在不同的返回栈中入栈时必然创建了新的实例。而singleInstance模式可以解决这个问题。在这种模式下会有一个单独的返回栈来管理这个activity,不管是哪个应用来访问这个activity,都共用同一个返回栈。于是就解决了共享这个activity实例的问题。

以上内容很多都是我自己的理解,如果有不对的地方,请指出来,万分感谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Acti启动模式