在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask, singleInstance.
标准模式在每次启动时, 都会创建实例; 三种单例模式, 会根据情况选择创建还是复用实例. 在Activity启动中, 创建实例的生命周期: onCreate -> onStart -> onResume; 重用实例的生命周期: onNewIntent -> onResume.
在AndroidManifest的Activity中, 使用launchMode属性, 可以设置启动模式, 默认是standard模式; 使用taskAffinity属性, 并添加包名, 可以设置Activity栈, 默认是当前包名, 只能应用于single模式.
希望通过本文, 可以更好的理解Activity的启动模式(LaunchMode).
观察Activity栈的脚本, 参考第5点.
adb shell dumpsys activity | sed -n -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
本文示例的GitHub下载地址
1. Standard
标准模式, 启动Activity的默认模式, 被启动的Activity会运行于启动的Activity栈, 因此必须使用Activity的Context启动, 不能使用Application, 否则会报错.
如MainActivity启动TestAActivity.
Stack #1:
Running activities (most recent first):
TaskRecord{3caa65e3 #2711 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=2}
Run #1: ActivityRecord{36b06e99 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2711}
Run #0: ActivityRecord{27396226 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2711}
Stack #0:
Running activities (most recent first):
TaskRecord{27d796c9 #2695 A=com.miui.home U=0 sz=1}
Run #0: ActivityRecord{2e5712cb u0 com.miui.home/.launcher.Launcher t2695}
栈内由下到上: MainActivity -> T