参考郭霖的《第一行代码》第二版。。。下文图片截图于此书 org
一个activity的启动模式是在AndroidManifest.xml注册活动时进行配置的。
<activity
android:launchMode="standard"
</activity>
共有四种模式—>
standard 这也是系统默认的模式,该模式每次都会创建新的activity活动,不管栈中是否存在。比如说栈顶是A1活动 要跳到A1这个活动,就会创建一个新的A1.
解决上述总是不断创建新的活动事例的缺点—>
SingleTop 第二种启动模式
这种启动模式创建新的活动时要先检查栈顶是否是要创建的活动,如果是则不创建,如果不是(即使栈中存在只是却不位于栈顶而已) 则创建。
为了保证栈中只有一个活动的事例,解决SingleTop的问题—>
SingleTask第三种启动模式
这种启动模式在创建新的活动事例时会先查找栈中是否有要创建的活动事例,如果是有则为了将其处于栈顶的位置则把它以上的活动都退出栈。否则没有就创建新的活动事例。
最后一种启动模式—>
SingleInstance 这个启动模式
使用一个 返回栈 处理一个activity活动事例使其能活跃在两个不同程序中或不同的栈中,解决了共享活动事例的问题。
此图中FirstActivity 和ThirdActivity 的启动模式均是默认standard
secondActivity模式是SingleInstance
onCreate 方法 均有—>
Log.d("XXXActivity---------->", "taskのId"+getTaskId());
获取打印栈的id语句。
从FirstActivity跳到secondActivity在跳到ThirdActivity 会得到
08-23 08:11:49.551 26303-26303/jp.co.jmas.fristprogram D/FirstActivity---------->: taskのId410
08-23 08:11:57.447 26303-26303/jp.co.jmas.fristprogram D/SecondActivity---->: taskのId408
08-23 08:12:04.091 26303-26303/jp.co.jmas.fristprogram D/ThirdActivity--->: taskのId410
即 secondActivity被id为408的返回栈管理。
分析—>
点击返回时 ThirdActivity从id为410的栈推出—->之后FirstActivity从id为410的栈推出
最后才是SecondActivity 被从返回栈推出。。。。
因为FirstActivity 和ThirdActivity在同一栈中,当ThirdActivity被推出时自然FirstActivity推到了栈顶,显示出,可与用户直接交互。。。再点击返回则FirstActivity被推出栈,这时位于返回栈栈顶的SecondActivity显示出,可与用户直接交互。
以上です。