1,默认启动方式 (standard)
Activity1->Activity2->Activity3
1.1运行adb shell dumpsys activity 查看栈的情况
1.2
由此可发现activity是先进的在栈底
此时 我们按下finish,在次运行adb shell dumpsys activity
由此 我们证实activity是先进后出
1.3 此时我们使用代码跳转进入activity2
Activity1->Activity2->Activity3-activity3
运行adb shell dumpsys activity 查看
由此证实,activity的默认启动方式:可以有多个相同的实例
2.singleTop
<activity
android:name=".activity_task.Activity1"
android:launchMode="singleTop">
<intent-filter>
<action
android:name="android.intent.action.MAIN"/>
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".activity_task.Activity2"
android:launchMode="singleTop"/>
<activity
android:name=".activity_task.Activity3"
android:launchMode="singleTop"></activity>
Activity1->Activity2->Activity3
2.1 此时我们再次加载activity3(Activity1->Activity2->Activity3-activity3)
运行adb shell dumpsys activity查看
由此:我们可以证实:Activity3 被重用
2.2 此时我们跳转去activity2(Activity1->Activity2->Activity3-activity3-activity2)
运行shell 命令
此时发现activity2 在次入栈
由此我们可以得出结论:如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
3.3singTask (Activity1->Activity2->Activity3)
3.4 此时我们再次跳转activity3(Activity1->Activity2->Activity3->activity3),运行命令查看
发现activity3 被重用
3.5 此时我们在跳转去activity2 运行命令查看
发现activity3被移除出栈
由此我们得出结论:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
4.singleInstance(Activity1->Activity2->Activity3)
4.1 不论启动activity1,activity2,activity3,都会只存在一个实例