Android线程栈的验证

来源:互联网 发布:有关医学的软件 编辑:程序博客网 时间:2024/06/06 00:47

我接下来要验证的问题是,Android线程栈的一个使用,是否遵循“先进后出”的原则。首先贴出我的xml的配置

<activity android:name=".TestLifeActivity"            android:configChanges="orientation|keyboardHidden"            android:launchMode="singleTask"            android:taskAffinity="com.hman.task1">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>        <activity android:name=".Test2LifeActivity"            android:configChanges="orientation|screenSize"            android:launchMode="singleTask"            android:taskAffinity="com.hman.task1"></activity>        <activity android:name=".Test3LifeActivity"            android:configChanges="orientation|screenSize"            android:launchMode="singleTask"            android:taskAffinity="com.hman.task1"></activity>        <activity android:name=".Test4LifeActivity"            android:configChanges="orientation|screenSize"            android:launchMode="singleTask"            android:taskAffinity="com.hman.task2"></activity>

创建任务栈的方式是:定义不同的taskAffinity名,android:taskAffinity=””
上面我定义了两个任务栈“com.hman.task1”和“com.hman.task2”,四个Activity。启动模式是singleTask。启动过程是T1—>T2—>T3—>T4—>T1,然后点击返回界面显示跳转到T4,再点击返回程序就退出了,跳转到界面。
通过解释这个现象,来验证和理解任务栈的使用。
在cmd中输入命令adb shell dumpsys activity com.jarek.wechatdemo可以得到com.jarek.wechatdemo是程序的包名。通过上面命令我们可以看到具体的栈任务的一个情况。T1—>T2—>T3—>T4这个过程的具体信息如下

C:\Users\***>adb shell dumpsys activity com.jarek.wechatdemoTASK com.hman.task2 id=31  ACTIVITY com.jarek.wechatdemo/.Test4LifeActivity 420aa888 pid=9244    Local Activity 41c9ebe8 State:      mResumed=true mStopped=false mFinished=false      mLoadersStarted=true      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.Test4LifeActivity@41c9ebe8      mContainer=android.app.Activity$1@41ca0138      mCurState=5 mStateSaved=false mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41d05410 V.E..... R.....I. 0,0-720,1280}        android.widget.LinearLayout{41d05860 V.E..... ......I. 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41d14e18 V.ED.... ......I. 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41bf1f98 V.E..... ......I. 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41c88c20 V.....C. ......I. 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41bff518 V.E..... ......I. 0,0-80,96}                  android.widget.ImageView{41bff898 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41c5bbb8 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41d40c58 V.E..... ......I. 80,0-313,96}                  android.widget.ImageView{41d40f30 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41bfb558 V.E..... ......I. 0,23-217,72}                    android.widget.TextView{41bfb780 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41cac8f0 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41c2ab10 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41ca7ac0 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41c6d558 V.ED.... ......I. 0,146-720,1280 #1020002 android:id/content}            android.widget.RelativeLayout{41c5b570 V.E..... ......I. 0,0-720,1134}              android.widget.Button{41c84ee0 VFED..C. ........ 40,40-198,136 #7f0a004a app:id/life_bt2}              android.widget.TextView{41b589f0 V.ED.... ........ 40,136-63,230 #7f0a004b app:id/flag_tv}              android.widget.LinearLayout{41c77648 V.E..... ......I. 40,270-602,348 #7f0a004c app:id/layout_linner}                android.widget.TextView{41d04d48 V.ED.... ........ 20,20-500,58 #7f0a004d app:id/spinner_content_et}                android.widget.ImageView{41d21830 V.ED.... ........ 520,28-542,50 #7f0a004e app:id/spinner_arr_img}          com.android.internal.widget.ActionBarContainer{41be6d30 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}TASK com.hman.task1 id=30  ACTIVITY com.jarek.wechatdemo/.Test3LifeActivity 42096130 pid=9244    Local Activity 41d3d6b0 State:      mResumed=false mStopped=true mFinished=false      mLoadersStarted=false      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.Test3LifeActivity@41d3d6b0      mContainer=android.app.Activity$1@41c0e3f8      mCurState=3 mStateSaved=true mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41cc83f8 I.E..... R....... 0,0-720,1280}        android.widget.LinearLayout{41d1fd28 V.E..... ........ 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41c90ea0 V.ED.... ........ 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41c47498 V.E..... ........ 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41cf0fd0 V.....C. ........ 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41cb1548 V.E..... ........ 0,0-80,96}                  android.widget.ImageView{41cb1830 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41bde440 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41c54c60 V.E..... ........ 80,0-313,96}                  android.widget.ImageView{41c54fb0 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41c7d740 V.E..... ........ 0,23-217,72}                    android.widget.TextView{41c7da80 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41ca43b8 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41caf2b8 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41d38b50 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41b5c850 V.ED.... ........ 0,146-720,1280 #1020002 android:id/content}            android.widget.RelativeLayout{41c9f0a0 V.E..... ........ 0,0-720,1134}              android.widget.Button{41cad500 VFED..C. ........ 40,40-198,136 #7f0a004a app:id/life_bt2}              android.widget.TextView{41d339c8 V.ED.... ........ 40,136-63,230 #7f0a004b app:id/flag_tv}              android.widget.LinearLayout{41c52510 V.E..... ........ 40,270-602,348 #7f0a004c app:id/layout_linner}                android.widget.TextView{41d09478 V.ED.... ........ 20,20-500,58 #7f0a004d app:id/spinner_content_et}                android.widget.ImageView{41c42170 V.ED.... ........ 520,28-542,50 #7f0a004e app:id/spinner_arr_img}          com.android.internal.widget.ActionBarContainer{41bf11d0 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}  ACTIVITY com.jarek.wechatdemo/.Test2LifeActivity 41fe4178 pid=9244    Local Activity 41d30fb0 State:      mResumed=false mStopped=true mFinished=false      mLoadersStarted=false      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.Test2LifeActivity@41d30fb0      mContainer=android.app.Activity$1@41d31120      mCurState=3 mStateSaved=true mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41d31d60 I.E..... R....... 0,0-720,1280}        android.widget.LinearLayout{41d323b0 V.E..... ........ 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41d32f18 V.ED.... ........ 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41d34960 V.E..... ........ 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41d367a0 V.....C. ........ 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41d38528 V.E..... ........ 0,0-80,96}                  android.widget.ImageView{41d38910 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41d39300 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41d3b128 V.E..... ........ 80,0-313,96}                  android.widget.ImageView{41d3b498 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41d3be90 V.E..... ........ 0,23-217,72}                    android.widget.TextView{41d3c208 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41d3ddc0 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41c10870 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41d40178 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41d41c90 V.ED.... ........ 0,146-720,1280 #1020002 android:id/content}            android.widget.RelativeLayout{41be35f0 V.E..... ........ 0,0-720,1134}              android.widget.Button{41c36ef0 VFED..C. ........ 40,40-198,136 #7f0a004a app:id/life_bt2}              android.widget.TextView{41c38038 V.ED.... ........ 40,136-63,230 #7f0a004b app:id/flag_tv}              android.widget.LinearLayout{41c41070 V.E..... ........ 40,270-602,348 #7f0a004c app:id/layout_linner}                android.widget.TextView{41c37250 V.ED.... ........ 20,20-500,58 #7f0a004d app:id/spinner_content_et}                android.widget.ImageView{41b4dfd0 V.ED.... ........ 520,28-542,50 #7f0a004e app:id/spinner_arr_img}          com.android.internal.widget.ActionBarContainer{41c0e468 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}  ACTIVITY com.jarek.wechatdemo/.TestLifeActivity 41dfc230 pid=9244    Local Activity 41d03278 State:      mResumed=false mStopped=true mFinished=false      mLoadersStarted=false      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.TestLifeActivity@41d03278      mContainer=android.app.Activity$1@41d033e8      mCurState=3 mStateSaved=true mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41d04020 I.E..... R....... 0,0-720,1280}        android.widget.LinearLayout{41d04670 V.E..... ........ 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41d051d8 V.ED.... ........ 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41d06c20 V.E..... ........ 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41d08a60 V.....C. ........ 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41d0a7e8 V.E..... ........ 0,0-80,96}                  android.widget.ImageView{41d0abd0 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41d0b5c0 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41d0d3e8 V.E..... ........ 80,0-313,96}                  android.widget.ImageView{41d0d758 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41d0e150 V.E..... ........ 0,23-217,72}                    android.widget.TextView{41d0e4c8 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41d10080 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41d226e0 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41d12438 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41d13f50 V.ED.... ........ 0,146-720,1280 #1020002 android:id/content}            android.widget.LinearLayout{41d17b70 V.E..... ........ 0,0-720,1134}              android.widget.Button{41d18160 VFED..C. ........ 0,0-128,96 #7f0a0050 app:id/life_bt}              android.support.v4.view.ViewPager{41d1a1d8 VFED.... ........ 0,96-720,1034 #7f0a0051 app:id/tab_pager}              com.jarek.wechatdemo.view.TabContainerView{41d1d068 V.E..... ........ 0,1034-720,1134 #7f0a0052 app:id/ll_tab_container}          com.android.internal.widget.ActionBarContainer{41d14a48 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}

信息量太多,我们可以挑我们需要的看

C:\Users\***>adb shell dumpsys activity com.jarek.wechatdemoTASK com.hman.task2 id=31  ACTIVITY com.jarek.wechatdemo/.Test4LifeActivity 420aa888 pid=9244    Local Activity 41c9ebe8 State:    ******    ******TASK com.hman.task1 id=30  ACTIVITY com.jarek.wechatdemo/.Test3LifeActivity 42096130 pid=9244    Local Activity 41d3d6b0 State:    ******    ******  ACTIVITY com.jarek.wechatdemo/.Test2LifeActivity 41fe4178 pid=9244    Local Activity 41d30fb0 State:    ******    ******  ACTIVITY com.jarek.wechatdemo/.TestLifeActivity 41dfc230 pid=9244    Local Activity 41d03278 State:

两个任务栈,以及他们对应的Activity很清晰的就可以看到了。
之后,当T4—>T1的具体信息如下:

C:\Users\***>adb shell dumpsys activity com.jarek.wechatdemoTASK com.hman.task1 id=28  ACTIVITY com.jarek.wechatdemo/.TestLifeActivity 41dcb058 pid=9244    Local Activity 41b561c8 State:      mResumed=true mStopped=false mFinished=false      mLoadersStarted=true      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.TestLifeActivity@41b561c8      mContainer=android.app.Activity$1@41b56338      mCurState=5 mStateSaved=false mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41b576d8 V.E..... R....... 0,0-720,1280}        android.widget.LinearLayout{41b585b8 V.E..... ........ 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41b59190 V.ED.... ........ 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41b5fb98 V.E..... ........ 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41bdbc88 V.....C. ........ 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41bddc28 V.E..... ........ 0,0-80,96}                  android.widget.ImageView{41bde170 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41bdff18 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41be1e00 V.E..... ........ 80,0-313,96}                  android.widget.ImageView{41be2170 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41be2b68 V.E..... ........ 0,23-217,72}                    android.widget.TextView{41be3008 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41be55e8 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41c41c38 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41be7af0 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41bee748 V.ED.... ........ 0,146-720,1280 #1020002 android:id/content}            android.widget.LinearLayout{41bf6098 V.E..... ........ 0,0-720,1134}              android.widget.Button{41bf67b0 VFED..C. ........ 0,0-128,96 #7f0a0050 app:id/life_bt}              android.support.v4.view.ViewPager{41c0eec0 VFED.... ........ 0,96-720,1034 #7f0a0051 app:id/tab_pager}              com.jarek.wechatdemo.view.TabContainerView{41c3a5d8 V.E..... ........ 0,1034-720,1134 #7f0a0052 app:id/ll_tab_container}          com.android.internal.widget.ActionBarContainer{41bf0580 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}TASK com.hman.task2 id=29  ACTIVITY com.jarek.wechatdemo/.Test4LifeActivity 41fa9158 pid=9244    Local Activity 41c9c438 State:      mResumed=false mStopped=true mFinished=false      mLoadersStarted=false      mChangingConfigurations=false      mCurrentConfig={1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h615dp 320dpi nrml long port finger -keyb/v/h -nav/h suim:1 skin=/system/framework/framework-res.apk s.6}    FragmentManager misc state:      mActivity=com.jarek.wechatdemo.Test4LifeActivity@41c9c438      mContainer=android.app.Activity$1@41c9c5a8      mCurState=3 mStateSaved=true mDestroyed=false    View Hierarchy:      com.android.internal.policy.impl.PhoneWindow$DecorView{41c9d208 I.E..... R....... 0,0-720,1280}        android.widget.LinearLayout{41c9d858 V.E..... ........ 0,0-720,1280}          com.android.internal.widget.ActionBarContainer{41c9e3c0 V.ED.... ........ 0,50-720,146 #1020359 android:id/action_bar_container}            com.android.internal.widget.ActionBarView{41c9fe08 V.E..... ........ 0,0-720,96 #102035a android:id/action_bar}              android.widget.LinearLayout{41ca1c48 V.....C. ........ 17,0-330,96}                com.android.internal.widget.ActionBarView$HomeView{41ca39d0 V.E..... ........ 0,0-80,96}                  android.widget.ImageView{41ca3db8 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.ImageView{41ca47a8 V.ED.... ........ 8,16-72,80 #102002c android:id/home}                android.widget.LinearLayout{41ca65d0 V.E..... ........ 80,0-313,96}                  android.widget.ImageView{41ca6940 G.ED.... ......I. 0,0-0,0 #1020246 android:id/up}                  android.widget.LinearLayout{41ca7338 V.E..... ........ 0,23-217,72}                    android.widget.TextView{41ca76b0 V.ED.... ........ 0,0-217,49 #102024d android:id/action_bar_title}                    android.widget.TextView{41ca9268 G.ED.... ......I. 0,0-0,0 #102024e android:id/action_bar_subtitle}              com.android.internal.view.menu.ActionMenuView{41cbd188 V.ED.... ......ID 720,0-720,96}            com.android.internal.widget.ActionBarContextView{41cab620 G.E..... ......ID 0,0-0,0 #102035b android:id/action_context_bar}          android.widget.FrameLayout{41cad138 V.ED.... ........ 0,146-720,1280 #1020002 android:id/content}            android.widget.RelativeLayout{41cb0d78 V.E..... ........ 0,0-720,1134}              android.widget.Button{41cb1290 VFED..C. ........ 40,40-198,136 #7f0a004a app:id/life_bt2}              android.widget.TextView{41cb33e0 V.ED.... ........ 40,136-63,230 #7f0a004b app:id/flag_tv}              android.widget.LinearLayout{41cb46f8 V.E..... ........ 40,270-602,348 #7f0a004c app:id/layout_linner}                android.widget.TextView{41cb5648 V.ED.... ........ 20,20-500,58 #7f0a004d app:id/spinner_content_et}                android.widget.ImageView{41cb6820 V.ED.... ........ 520,28-542,50 #7f0a004e app:id/spinner_arr_img}          com.android.internal.widget.ActionBarContainer{41cadc30 G.ED.... ......ID 0,0-0,0 #102035c android:id/split_action_bar}

在这一步我们可以看到两个任务栈中只剩下两个Activity。T2,T3消失了。
最后点击返回,我们可以发现先跳转到T4,最后就跳到桌面了。
解释:
发生这种现象的原因是,在“com.hman.task1”任务栈中的3个Activity,他们的排列顺序是T1,T2,T3(从低到顶),遵循“先进后出”的原则。当从T4跳转到T1的时候,要把T1显示在前台,在T1上面的T2,T3必须出栈。这也就是为什么,之后上面信息的“com.hman.task1”栈中看不到T2,T3的原因。

0 0