
观察Activity栈的脚本, 参考第5点 .
adb shell dumpsys activity | sed -n -e "/Stack #/p" -e "/Running activities/,/Run #0/p"
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 -> TestAActivity.Running activities (most recent first):TaskRecord{12abf566 #2712 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=3}Run #2: ActivityRecord{187d7ff7 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2712}Run #1: ActivityRecord{a551034 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2712}Run #0: ActivityRecord{22f9cce4 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2712}栈内: MainActivity -> TestAActivity -> TestBActivityRunning activities (most recent first):TaskRecord{1792f5f0 #2715 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=5}Run #4: ActivityRecord{1e70110b u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2715}Run #3: ActivityRecord{c7f4dce u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestCActivity t2715}Run #2: ActivityRecord{254536cd u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2715}Run #1: ActivityRecord{36b2da15 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2715}Run #0: ActivityRecord{3a1c4a6a u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2715}栈内: MainActivity -> TestAActivity -> TestBActivity ->TestCActivity -> TestBActivityRunning activities (most recent first):TaskRecord{d5d53d4 #2727 A=me.chunyu.spike.stack U=0 sz=1}Run #2: ActivityRecord{1d720e55 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2727}TaskRecord{a3f797d #2726 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=2}Run #1: ActivityRecord{ffd689d u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2726}Run #0: ActivityRecord{192310ac u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2726}使用taskAffinity属性, 添加新的Activity栈, 与SingleTask配合使用, Standard模式无效.Running activities (most recent first):TaskRecord{18230815 #2737 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=3}Run #4: ActivityRecord{1126c300 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2737}Run #3: ActivityRecord{3114fee8 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2737}Run #2: ActivityRecord{f8e235d u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2737}TestC启动TestB, SingleTask模式, 导致clearTop, TestC出栈.Running activities (most recent first):TaskRecord{1d05e6c9 #2754 A=me.chunyu.spike.stack U=0 sz=2}Run #4: ActivityRecord{3f77e822 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestCActivity t2754}TaskRecord{3fe736d0 #2753 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=2}Run #3: ActivityRecord{15f0470e u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2753}TaskRecord{1d05e6c9 #2754 A=me.chunyu.spike.stack U=0 sz=2}Run #2: ActivityRecord{181229e6 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2754}TaskRecord{3fe736d0 #2753 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=2}Run #1: ActivityRecord{28628d61 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2753}TaskRecord{2d646058 #2719 A=com.android.incallui U=0 sz=1}TestC至于栈顶, 点击Back键, 不是返回TestA(启动TestC的实例), 而是TestB, 即优先返回相同栈的实例. 再次是TestA, 然后是MainActivity, 依次出栈.Running activities (most recent first):TaskRecord{384e3928 #2765 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=1}Run #3: ActivityRecord{1ffc5b6b u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2765}TaskRecord{2ad03544 #2764 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=3}Run #2: ActivityRecord{293d8c37 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestCActivity t2764}Run #1: ActivityRecord{158bc0f3 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2764}Run #0: ActivityRecord{77691cf u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2764}5. startActivityForResultRunning activities (most recent first):TaskRecord{323200ac #2786 A=me.chunyu.clwang.stack U=0 sz=3}Run #4: ActivityRecord{3f9e14f3 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2786}Run #3: ActivityRecord{30d8f17b u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2786}Run #2: ActivityRecord{11b95b5c u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestBActivity t2786}TaskRecord{c86e175 #2785 A=me.chunyu.spike.wcl_activity_launchmode_demo U=0 sz=2}Run #1: ActivityRecord{3558d7c4 u0 me.chunyu.spike.wcl_activity_launchmode_demo/.TestAActivity t2785}Run #0: ActivityRecord{1b8620c u0 me.chunyu.spike.wcl_activity_launchmode_demo/.MainActivity t2785}由此可知, 因为startActivityForResult需要返回值, 会保留实例, 覆盖单例效果.