android技巧:dumpsys簡化資訊檢視Activity結構
阿新 • • 發佈:2021-01-17
技術標籤:android
一般獲取Activity棧結構都是通過dumpsys去獲取,但是內容實在太多
比如通過adb shell dumpsys activity activities
檢視結果如下:
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Display #0 (activities from top to bottom): Stack #1: type=standard mode=fullscreen isSleeping=false mBounds=Rect(0, 0 - 0, 0) Task id #165 mBounds=Rect(0, 0 - 0, 0) mMinWidth=-1 mMinHeight=-1 mLastNonFullscreenBounds=null * TaskRecord{17cbd80 #165 A=com.craaaaazy.test3 U=0 StackId=1 sz=2} userId=0 effectiveUid=u0a70 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null affinity=com.craaaaazy.test3 intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.craaaaazy.test3/.MainActivity} realActivity=com.craaaaazy.test3/.MainActivity autoRemoveRecents=false isPersistable=true numFullscreen=2 activityType=1 rootWasReset=false mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE Activities=[ActivityRecord{270f455 u0 com.craaaaazy.test3/.MainActivity t165}, ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165}] askedCompatMode=false inRecents=true isAvailable=true mRootProcess=ProcessRecord{30d967b 2043:com.craaaaazy.test3/u0a70} stackId=1 hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION mSupportsPictureInPicture=false isResizeable=true lastActiveTime=639694 (inactive for 14s) * Hist #1: ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165} packageName=com.craaaaazy.test3 processName=com.craaaaazy.test3 launchedFromUid=10070 launchedFromPackage=com.craaaaazy.test3 userId=0 app=ProcessRecord{30d967b 2043:com.craaaaazy.test3/u0a70} Intent { cmp=com.craaaaazy.test3/.LaunchMode1 } frontOfTask=false task=TaskRecord{17cbd80 #165 A=com.craaaaazy.test3 U=0 StackId=1 sz=2} taskAffinity=com.craaaaazy.test3 realActivity=com.craaaaazy.test3/.LaunchMode1 baseDir=/data/app/com.craaaaazy.test3-0YKzPDN8A2dPKac_eAD4Zw==/base.apk dataDir=/data/user/0/com.craaaaazy.test3 stateNotNeeded=false componentSpecified=true mActivityType=standard compat={560dpi} labelRes=0x7f0e001b icon=0x7f0c0000 theme=0x7f0f01bf mLastReportedConfigurations: mGlobalConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=undefined} s.8} mOverrideConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 144 0, 2792) mWindowingMode=fullscreen mActivityType=standard} s.8} CurrentConfiguration={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=standard} s.8} taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=ff6200ee backgroundColor=ffffffff statusBarColor=ff3700b3 navigationBarColor=ff000000 launchFailed=false launchCount=1 lastLaunchTime=-14s781ms haveState=false icicle=null state=RESUMED stopped=false delayedResume=false finishing=false keysPaused=false inHistory=true visible=true sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN fullscreen=true noDisplay=false immersive=false launchMode=0 frozenBeforeDestroy=false forceNewConfig=false mActivityType=standard waitingVisible=false nowVisible=true lastVisibleTime=-13s980ms resizeMode=RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false * Hist #0: ActivityRecord{270f455 u0 com.craaaaazy.test3/.MainActivity t165} packageName=com.craaaaazy.test3 processName=com.craaaaazy.test3 launchedFromUid=0 launchedFromPackage=null userId=0 app=ProcessRecord{30d967b 2043:com.craaaaazy.test3/u0a70} Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.craaaaazy.test3/.MainActivity } frontOfTask=true task=TaskRecord{17cbd80 #165 A=com.craaaaazy.test3 U=0 StackId=1 sz=2} taskAffinity=com.craaaaazy.test3 realActivity=com.craaaaazy.test3/.MainActivity baseDir=/data/app/com.craaaaazy.test3-0YKzPDN8A2dPKac_eAD4Zw==/base.apk dataDir=/data/user/0/com.craaaaazy.test3 stateNotNeeded=false componentSpecified=true mActivityType=standard compat={560dpi} labelRes=0x7f0e001b icon=0x7f0c0000 theme=0x7f0f01bf mLastReportedConfigurations: mGlobalConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=undefined} s.8} mOverrideConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 144 0, 2792) mWindowingMode=fullscreen mActivityType=standard} s.8} CurrentConfiguration={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=standard} s.8} taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=ff6200ee backgroundColor=ffffffff statusBarColor=ff3700b3 navigationBarColor=ff000000 launchFailed=false launchCount=0 lastLaunchTime=-10m10s696ms haveState=true icicle=Bundle[mParcelledData.dataSize=1232] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED fullscreen=true noDisplay=false immersive=false launchMode=0 frozenBeforeDestroy=false forceNewConfig=false mActivityType=standard waitingVisible=false nowVisible=false lastVisibleTime=-10m8s755ms resizeMode=RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false Running activities (most recent first): TaskRecord{17cbd80 #165 A=com.craaaaazy.test3 U=0 StackId=1 sz=2} Run #1: ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165} Run #0: ActivityRecord{270f455 u0 com.craaaaazy.test3/.MainActivity t165} mResumedActivity: ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165} mLastPausedActivity: ActivityRecord{270f455 u0 com.craaaaazy.test3/.MainActivity t165} Stack #0: type=home mode=fullscreen isSleeping=false mBounds=Rect(0, 0 - 0, 0) Task id #2 mBounds=Rect(0, 0 - 0, 0) mMinWidth=-1 mMinHeight=-1 mLastNonFullscreenBounds=null * TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} userId=0 effectiveUid=u0a7 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.Launcher} realActivity=com.android.launcher3/.Launcher autoRemoveRecents=false isPersistable=true numFullscreen=1 activityType=2 rootWasReset=false mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE Activities=[ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2}] askedCompatMode=false inRecents=true isAvailable=true mRootProcess=ProcessRecord{d9103dd 1359:com.android.launcher3/u0a7} stackId=0 hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE mSupportsPictureInPicture=false isResizeable=true lastActiveTime=43492 (inactive for 610s) * Hist #0: ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2} packageName=com.android.launcher3 processName=com.android.launcher3 launchedFromUid=0 launchedFromPackage=null userId=0 app=ProcessRecord{d9103dd 1359:com.android.launcher3/u0a7} Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.Launcher } frontOfTask=true task=TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} taskAffinity=null realActivity=com.android.launcher3/.Launcher baseDir=/system/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk dataDir=/data/user/0/com.android.launcher3 stateNotNeeded=true componentSpecified=false mActivityType=home compat={560dpi} labelRes=0x7f110035 icon=0x7f08001b theme=0x7f120002 mLastReportedConfigurations: mGlobalConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=undefined} s.8} mOverrideConfig={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 144 0, 2792) mWindowingMode=fullscreen mActivityType=home} s.8} CurrentConfiguration={1.0 310mcc270mnc [zh_CN_#Hans,en_US] ldltr sw411dp w411dp h773dp 560dpi nrml long port finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1440, 2792) mAppBounds=Rect(0, 0 - 1440, 2792) mWindowingMode=fullscreen mActivityType=home} s.8} OverrideConfiguration={0.0 ?mcc?mnc ?localeList ?layoutDir ?swdp ?wdp ?hdp ?density ?lsize ?long ?ldr ?wideColorGamut ?orien ?uimode ?night ?touch ?keyb/?/? ?nav/? winConfig={ mBounds=Rect(0, 0 - 0, 0 ) mAppBounds=null mWindowingMode=undefined mActivityType=home}} taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=fff5f5f5 backgroundColor=fffafafa statusBarColor=0 navigationBarColor=0 launchFailed=false launchCount=0 lastLaunchTime=-10m36s712ms haveState=true icicle=Bundle[mParcelledData.dataSize=3684] state=STOPPED stopped=true delayedResume=false finishing=false keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN fullscreen=true noDisplay=false immersive=false launchMode=2 frozenBeforeDestroy=false forceNewConfig=false mActivityType=home waitingVisible=false nowVisible=false lastVisibleTime=-10m33s661ms resizeMode=RESIZE_MODE_RESIZEABLE mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false Running activities (most recent first): TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} Run #0: ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2} mLastPausedActivity: ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2} ResumedActivity: ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165} mFocusedStack=ActivityStack{caccf1 stackId=1 type=standard mode=fullscreen visible=true translucent=false, 1 tasks} mLastFocusedStack=ActivityStack{caccf1 stackId=1 type=standard mode=fullscreen visible=true translucent=false, 1 tasks} mCurTaskIdForUser={0=165} mUserStackInFront={} displayId=0 stacks=2 mHomeStack=ActivityStack{430e0d6 stackId=0 type=home mode=fullscreen visible=false translucent=true, 1 tasks} isHomeRecentsComponent=true KeyguardController: mKeyguardShowing=false mAodShowing=false mKeyguardGoingAway=false mOccluded=false mDismissingKeyguardActivity=null mDismissalRequested=false mVisibilityTransactionDepth=0 LockTaskController mLockTaskModeState=NONE mLockTaskModeTasks= mLockTaskPackages (userId:packages)= u0:[]
這裡麵包含了太多資訊,包括意圖、資料、適配、背景等等,實際上大多情況下我們只需要關注我們的棧結構以及Activity的順序是否達到了我們的預期
解決方案
1. 簡要資訊
因此可以藉助grep來完成最終效果
首先進入android手機終端
adb shell
然後通過dumpsys列印資訊,並通過grep查詢Hist相關資訊即可。
dumpsys activity activities|grep Hist
最終獲取結果如下:
* Hist #3: ActivityRecord{ccbcbb8 u0 com.craaaaazy.test3/.LaunchMode3 t165} keysPaused=false inHistory=true visible=true sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN * Hist #2: ActivityRecord{bae469c u0 com.craaaaazy.test3/.LaunchMode2 t165} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN * Hist #1: ActivityRecord{998e67d u0 com.craaaaazy.test3/.LaunchMode1 t165} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN * Hist #0: ActivityRecord{270f455 u0 com.craaaaazy.test3/.MainActivity t165} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED * Hist #0: ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN
資訊簡潔明瞭,便於快速分析
2. 包含Stack/TaskRecord的簡明資訊
上面資訊雖然簡明,但是隻是羅列了Activity的順序,看不出是分別在哪個對應的棧中,可以用正則的方式過濾資訊,如下:
dumpsys activity activities|grep -E 'Stack|TaskRecord|Hist'
通過-E,過濾出Stack棧順序和結構、TaskRecord任務的順序和結構以及Activity的順序,如下:
Stack #7: type=standard mode=fullscreen * TaskRecord{569e404 #170 A=com.android.gallery3d U=0 StackId=7 sz=1} * Hist #0: ActivityRecord{40b516b u0 com.android.gallery3d/.app.GalleryActivity t170} frontOfTask=true task=TaskRecord{569e404 #170 A=com.android.gallery3d U=0 StackId=7 sz=1} keysPaused=false inHistory=true visible=true sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_SHOWN TaskRecord{569e404 #170 A=com.android.gallery3d U=0 StackId=7 sz=1} Stack #0: type=home mode=fullscreen * TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} * Hist #0: ActivityRecord{79ba14e u0 com.android.launcher3/.Launcher t2} frontOfTask=true task=TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN TaskRecord{4d9dfb9 #2 I=com.android.launcher3/.Launcher U=0 StackId=0 sz=1} Stack #6: type=standard mode=fullscreen * TaskRecord{ff20a25 #169 A=com.craaaaazy.test3 U=0 StackId=6 sz=1} * Hist #0: ActivityRecord{33a8d8e u0 com.craaaaazy.test3/.LaunchMode3 t169} frontOfTask=true task=TaskRecord{ff20a25 #169 A=com.craaaaazy.test3 U=0 StackId=6 sz=1} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED TaskRecord{ff20a25 #169 A=com.craaaaazy.test3 U=0 StackId=6 sz=1} Stack #4: type=standard mode=fullscreen * TaskRecord{61281c2 #168 A=com.craaaaazy.test3 U=0 StackId=4 sz=3} * Hist #2: ActivityRecord{1de3363 u0 com.craaaaazy.test3/.LaunchMode2 t168} frontOfTask=false task=TaskRecord{61281c2 #168 A=com.craaaaazy.test3 U=0 StackId=4 sz=3} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN * Hist #1: ActivityRecord{4460310 u0 com.craaaaazy.test3/.LaunchMode1 t168} frontOfTask=false task=TaskRecord{61281c2 #168 A=com.craaaaazy.test3 U=0 StackId=4 sz=3} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED * Hist #0: ActivityRecord{110404f u0 com.craaaaazy.test3/.MainActivity t168} frontOfTask=true task=TaskRecord{61281c2 #168 A=com.craaaaazy.test3 U=0 StackId=4 sz=3} keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED TaskRecord{61281c2 #168 A=com.craaaaazy.test3 U=0 StackId=4 sz=3} mFocusedStack=ActivityStack{a77ded stackId=7 type=standard mode=fullscreen visible=true translucent=false, 1 tasks} mLastFocusedStack=ActivityStack{a77ded stackId=7 type=standard mode=fullscreen visible=true translucent=false, 1 tasks} mUserStackInFront={} mHomeStack=ActivityStack{430e0d6 stackId=0 type=home mode=fullscreen visible=false translucent=true, 1 tasks}
這樣再去分析就可以忽略很多不必要的內容,一目瞭然。
同樣的方法,可以用來簡化dumpsys支援的其他資訊~