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的原因。
- Android线程栈的验证
- Titan线程隔离的验证
- 1.1线程的随机性验证
- Android线程、线程、线程的实现方式!
- Android验证手机号码的
- Android 身份证号码的验证
- 实验: 线程操作细节的验证
- 验证后台线程的java多线程技术
- HashMap与Hashtable的线程安全性验证
- 验证linux下线程的同步运行
- StringBuffer与StringBuilder的线程安全性验证
- StringBuffer与StringBuilder的线程安全性验证
- StringBuffer与StringBuilder的线程安全性验证
- hashSet不是线程安全的验证
- Android验证码的生成与验证
- android的线程封装
- Android线程的学习
- Android 线程的处理
- LeetCode: Linked List Cycle
- 学习个人网页制作全过程
- 微信接入js-sdk-获取地理位置,打开微信内置地图
- zabbix自动发现并监控tcp端口
- Intent启动activity 传值和回传值
- Android线程栈的验证
- 红黑树之 原理和算法详细介绍
- 详解android:scaleType属性
- redis的接口代码实例
- hive打印hbase时间戳
- 自己实现Spring AOP(一)环境搭建及知识准备
- python安装及环境配置
- Python中WSGI接口的理解
- 友盟第三方平台操作流程