您的位置:首页 > 移动开发

Android启动模式:singleTask的深究--其真正含义的解读之app内试验研究

2014-10-31 17:10 260 查看

singleTask启动分析与试验结果(app内研究):

试验1、MainActivity是singleTask启动模式,启动顺序MainActivity-->A,A-->MainActivity
MainActivity.onCreate   --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--true
MainActivity.onResume   --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--true
A           .onCreate   --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--false
A           .onResume   --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--false
MainActivity.onNewIntent--myPid--1107--threadId--1--getTaskId--75--isTaskRoot--true
MainActivity.onResume   --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--true
A           .onStop     --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--false
A           .onDestroy  --myPid--1107--threadId--1--getTaskId--75--isTaskRoot--false
可见进程id,线程id,taskid都相同。MainActivity是栈的底部,再次启动MainActivity,进入的是onNewIntent,然后就会杀死位于其上的所有Activity的。

试验2、A是singleTask启动模式,启动顺序MainActivity-->A-->B,B-->A

MainActivity.onCreate   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--true
MainActivity.onResume   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--true
A           .onCreate   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
A           .onResume   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
B           .onCreate   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
B           .onResume   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
A           .onNewIntent--myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
A           .onResume   --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
B           .onStop     --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
B           .onDestroy  --myPid--3827--threadId--1--getTaskId--82--isTaskRoot--false
分析如试验1。从结果中可以看出尽管A是singleTask启动模式,但并未创建信的task。而且其也不是task的根部。

总结:

1、singleTask并不是总是新建一个task任务栈,如果此app的栈(不包括singleInstance的任务栈,因为其单独享受一个task)已经存在,就会使用此栈,如果不存在就会创建一个新的task
2、Intent.FLAG_ACTIVITY_NEW_TASK 标志的作用同singleTask,所以它的使用结论同1。
3、当singleTask的Activity再次启动时,会清空在其以上的所有Activity,尽管它不是在task的根部。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐