官方文档task and back stack一文,地址:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
提到定义启动模式有两种方法,一个是在manifest文件中定义,另一个用intent设置flag。
前一种方法有android的四大启动模式,其中就有“singleTask”:以此种模式启动的activity例如activityA会在一个新task栈中的根部启动,而且此栈可以加入新的activity。当在其他activity中要启动activityA时,如果有activityA实例存在,就会把其抬到前台而不去启动新的activityA。
后一种方法有好多flag,其中文档中说与“singleTask”行为相似的是FLAG_ACTIVITY_NEW_TASK:
FLAG_ACTIVITY_NEW_TASK
onNewIntent()
.
This produces the same behavior as the "singleTask"
launchMode
value,
discussed in the previous section.
但事实是这样的吗?
我实验了一天,结论如下:
一、实验中“singleTask”的行为:有如下几个activity A、B、C,B的启动模式是singleTask,A启动B,B启动C,C再启动B。
结果是C被销毁掉,B到前台。此时剩下两个activity,A和B。用adb shell dumpsys activity来看,
Run #3: HistoryRecord{406954f0 com.linc.TestBackStack/.ActivityB}
Run #2: HistoryRecord{4065f880 com.linc.TestBackStack/.ActivityA}
二、实验中FLAG_ACTIVITY_NEW_TASK的行为(环境同上):
A中启动B,intent设置flag FLAG_ACTIVITY_NEW_TASK,B启动C,C再启动B。
B被抬到前台,而没有发现C被销毁。
用adb shell dumpsys activity来看,
Run #5: HistoryRecord{407c28c8 com.linc.TestBackStack/.ActivityB}
Run #4: HistoryRecord{406c0b48 com.linc.TestBackStack/.ActivityC}
Run #3: HistoryRecord{406ec298 com.linc.TestBackStack/.ActivityB}
Run #2: HistoryRecord{406cedb8 com.linc.TestBackStack/.ActivityA}
用BACK键可以从B退到C,再次按BACK键,没有反应,无响应。
出现这种情况,文档描述和实际不符,二中的B有两个?是dumpsys出了问题?
不知哪位高人能给予解释。
调查还在继续。。。