美文网首页
Activity启动模式

Activity启动模式

作者: 牙膏很好吃 | 来源:发表于2019-05-07 20:01 被阅读0次

1.standard标准模式

特点:系统每启动一次activity,都会创建一个新的实例,并将其添加在启动者任务栈的栈顶。

示例: A1->B->C->A2, 则栈内元素从栈顶到栈底依次为A2,C,B,A1,依次出栈顺序也为A2,C,B,A1。

2.singleTask栈内复用

特点:这是一种单实例模式,只要栈内存在某一个activity实例,则启动该activity都会复用此activity,并且生命周期会调用onNewIntent(),不会调用onCreate(),onStart(),同时,singleTask具有清除相同任务栈上层所有activity的效果。

示例:①相同任务栈:A->B1->C->B2,再依次点击返回:

(启动按钮)taskA onCreate-> 

taskB1 onCreate-> 

taskC onCreate->

(taskB1 onNewIntent->taskC onDestroy)->           

 (返回按钮)taskB1 onDestroy->

taskA onDestroy,

相同任务栈,始终调用的是B1,B2不会出现。

②不同任务栈:A,C,D属于栈m,并且launchmode为singletask,B属于栈n ,launchmode为singletask,

 模拟A->B1->D->B2,依次点击返回,

(启动)taskA onCreate->

taskB1 onCreate different task->

taskD onCreate->

taskB1 onNewIntent ifferent task->                                 

 (返回)taskB1 onDestroy  different task->

taskD onDestroy->

taskA onDestroy,

可见存在于不同任务栈的D activity不会被清除;

模拟A->B->D1->C->D2,依次点击返回,

(启动)taskA onCreate->

taskB onCreate different task->

taskD1 onCreate->

taskC onCreate->                                                      

 (taskD1onNewIntent- >taskC  onDestroy)->

 (返回)taskD1 onDestroy->

taskA onDestroy->

taskB onDestroy different task,

应用会先关闭最靠前任务栈的activity,然后关闭后面任务栈的activity,并不是按照activity启动顺序进行关闭的,与任务栈顺序有关系;

 ②不同任务栈:A,C,D属于栈m,并且launchmode为standart,B属于栈n ,launchmode为singletask:

模拟A->B1->D->B2,依次点击返回,

(启动)taskA onCreate->

taskB1 onCreate different task->

taskD onCreate->

(taskB1 onNewIntent different task ->taskD onDestroy)->

(返回)taskB1 onDestroy different task->

taskA onDestroy

可见当被启动的activity启动模式是standard的时候,被启动的activity会被加入到启动它的activity栈中,当被启动的activity不是standard时,不会被加入到启动者的任务栈中。

3.singleTop栈顶复用

特点:位于顶部的activity会被复用。

示例:A->B->C->D->C,则栈顺序为C,D,C,B,A;  A->B->C->C,则栈顺序为C,B,A。

4.singleInstance单栈复用

特点:系统只会创建一个实例,并且只存在与一个单独的任务栈中。

相关文章

网友评论

      本文标题:Activity启动模式

      本文链接:https://www.haomeiwen.com/subject/vqqpgqtx.html