1. 程式人生 > 其它 >android技巧:dumpsys簡化資訊檢視Activity結構

android技巧:dumpsys簡化資訊檢視Activity結構

技術標籤: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支援的其他資訊~