dumpsys activity activities中的Task和ActivityRecord信息解读
系统开发中,我们经常通过dumpsys activity activities,或者dumpsys activity xxx,xxx为具体的Activity名,通过这些方式来查看某个或者全部Activity的信息。

下面的dumpsys信息就是在上图所示的场景下,通过dumpsys activity activities得到的信息,这里截取了第一个Task,来解读Task中各个字段的信息。
* Task{b7f40b1 #1 type=undefined U=0 visible=true visibleRequested=true mode=fullscreen translucent=false sz=1}* Task{c66ea45 #6 type=undefined U=0 rootTaskId=1 visible=true visibleRequested=true mode=fullscreen translucent=false sz=1}mLastPausedActivity: ActivityRecord{6977e8e u0 com.android.launcher3/.uioverrides.QuickstepLauncher t6}mLastNonFullscreenBounds=Rect(699, 77 - 1221, 1039)isSleeping=falsetopResumedActivity=ActivityRecord{6977e8e u0 com.android.launcher3/.uioverrides.QuickstepLauncher t6}* Hist #0: ActivityRecord{6977e8e u0 com.android.launcher3/.uioverrides.QuickstepLauncher t6}packageName=com.android.launcher3 processName=com.android.launcher3launchedFromUid=0 launchedFromPackage=null launchedFromFeature=null userId=0app=ProcessRecord{ee55ee5 1248:com.android.launcher3/u0a74}Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.uioverrides.QuickstepLauncher (has extras) }rootOfTask=true task=Task{c66ea45 #6 type=undefined}taskAffinity=nullmActivityComponent=com.android.launcher3/.uioverrides.QuickstepLauncherbaseDir=/data/app/~~-Ma3a7ZTpeC5g9fEOgTtgw==/com.android.launcher3-5UIYMfzBrMaV5DZ1ogn43w==/base.apkdataDir=/data/user/0/com.android.launcher3stateNotNeeded=true componentSpecified=true mActivityType=homecompat={240dpi always-compat} theme=0x7f12000cmLastReportedConfigurations:mGlobalConfig={1.0 ?mcc0mnc [en_US] ldltr sw720dp w1280dp h696dp 240dpi lrg long land night -touch qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1920, 1080) mAppBounds=Rect(0, 0 - 1920, 1080) mMaxBounds=Rect(0, 0 - 1920, 1080) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} s.16 fontWeightAdjustment=0}mOverrideConfig={1.0 ?mcc0mnc [en_US] ldltr sw720dp w1280dp h664dp 240dpi lrg long land night -touch qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1920, 1080) mAppBounds=Rect(0, 0 - 1920, 1032) mMaxBounds=Rect(0, 0 - 1920, 1080) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.4 fontWeightAdjustment=0}CurrentConfiguration={1.0 ?mcc0mnc [en_US] ldltr sw720dp w1280dp h664dp 240dpi lrg long land night -touch qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1920, 1080) mAppBounds=Rect(0, 0 - 1920, 1032) mMaxBounds=Rect(0, 0 - 1920, 1080) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.8 fontWeightAdjustment=0}RequestedOverrideConfiguration={0.0 ?mcc0mnc ?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 mMaxBounds=Rect(0, 0 - 0, 0) mDisplayRotation=undefined mWindowingMode=undefined mDisplayWindowingMode=undefined mActivityType=home mAlwaysOnTop=undefined mRotation=undefined} ?fontWeightAdjustment}taskDescription: label="null" icon=null iconResource=/0 iconFilename=null primaryColor=ff191c20backgroundColor=ff191c20 statusBarColor=0 navigationBarColor=0backgroundColorFloating=ff191c20launchFailed=false launchCount=0 lastLaunchTime=-5m49s837msmHaveState=false mIcicle=nullstate=RESUMED delayedResume=false finishing=falsekeysPaused=false inHistory=true idle=trueoccludesParent=true noDisplay=false immersive=false launchMode=2mActivityType=homemImeInsetsFrozenUntilStartInput=truewindows=[Window{ddf3e3e u0 com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher}]windowType=2mOccludesParent=trueoverrideOrientation=SCREEN_ORIENTATION_UNSPECIFIEDrequestedOrientation=SCREEN_ORIENTATION_UNSPECIFIEDmVisibleRequested=true mVisible=true mClientVisible=true reportedDrawn=true reportedVisible=truemNumInterestingWindows=1 mNumDrawnWindows=1 allDrawn=true lastAllDrawn=false)startingData=null firstWindowDrawn=true mIsExiting=falsenowVisible=true lastVisibleTime=-1m25s655msconnections={ConnectionRecord{cc59e78 u0 com.android.launcher3/com.android.quickstep.TouchInteractionService:@39f53db flags=0x0}}resizeMode=RESIZE_MODE_RESIZEABLEmLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=falsesupportsSizeChanges=SIZE_CHANGES_UNSUPPORTED_METADATAconfigChanges=0xdf3neverSandboxDisplayApis=falsealwaysSandboxDisplayApis=falseareBoundsLetterboxed=falsemCameraCompatControlState=hiddenmCameraCompatControlEnabled=false
这段输出展示了 Android 系统中 Activity Manager Service (AMS) 所管理的一部分任务(Task)和活动(Activity)的状态。这里主要关注的是与 Launcher3 (包名 com.android.launcher3) 相关的 Task 和 Activity。
整体结构
输出内容大致分为两个层级:
- Task 层级: 代表一个应用程序的任务栈。这里显示了两个 Task,Task #1 和 Task #6。Task #6 是我们主要关注的,因为它包含了 Launcher 的 Activity。
- ActivityRecord 层级: 代表 Task 中的一个具体 Activity 实例。这里详细展示了 Task #6 中的
com.android.launcher3/.uioverrides.QuickstepLauncher这个 Activity 的状态。
Task 字段解析 (Task{c66ea45 #6 ...})
Task{c66ea45 #6 ...}: 标识一个 Task 对象。c66ea45: Task 对象在内存中的标识符(哈希码)。#6: Task 的唯一 ID。type=undefined: Task 的类型,undefined通常表示标准的应用程序 Task。U=0: 运行该 Task 的用户 ID,0 通常是设备主用户。rootTaskId=1: 该 Task 所属的根 Task ID,与显示和任务组织有关。visible=true,visibleRequested=true: Task 当前是否可见,以及是否被请求可见。两者都为true表示 Task 正在显示。mode=fullscreen: Task 的窗口模式,这里是全屏模式。translucent=false: Task 顶部的 Activity 是否是半透明的。false表示不透明。sz=1: Task 中包含的 Activity 数量,这里为 1。
mLastPausedActivity: ActivityRecord{...}: 此 Task 中最后一个被暂停的 Activity(在这里是 Launcher 自己)。mLastNonFullscreenBounds=Rect(...): Task 最后一次处于非全屏状态(如分屏、自由窗口)时的边界信息。isSleeping=false: AMS 是否认为此 Task 处于休眠状态。topResumedActivity=ActivityRecord{...}: 当前位于此 Task 栈顶且处于 Resumed 状态的 Activity(即当前用户正在交互的 Activity,这里是 Launcher)。
ActivityRecord 字段解析 (* Hist #0: ActivityRecord{6977e8e u0 ...})
这是 Task #6 中唯一的 Activity (Hist #0 表示历史记录中的第 0 个,即栈顶)。
ActivityRecord{6977e8e u0 ...}: 标识一个 ActivityRecord 对象。6977e8e: ActivityRecord 对象在内存中的标识符。u0: 用户 ID。com.android.launcher3/.uioverrides.QuickstepLauncher: Activity 的完整组件名称 (包名/类名)。t6: 该 Activity 所属的 Task ID。
packageName=com.android.launcher3,processName=com.android.launcher3: 应用包名和进程名。launchedFromUid=0,launchedFromPackage=null,launchedFromFeature=null: 启动此 Activity 的来源信息 (UID, 包名, 特性)。Uid 0 通常是系统。userId=0: 运行此 Activity 的用户 ID。app=ProcessRecord{...}: 托管此 Activity 的进程记录 (ProcessRecord) 的引用。Intent { ... }: 启动此 Activity 的 Intent。这里是标准的ACTION_MAIN和CATEGORY_HOME,表明这是 Home 应用(桌面)。flg=0x10000100是 Intent 的 Flag。rootOfTask=true: 表明此 Activity 是其所在 Task 的根 Activity。task=Task{c66ea45 #6 ...}: 指向所属 Task 的引用。taskAffinity=null: Task Affinity(任务相关性),null表示使用默认的(基于包名)。mActivityComponent: 重复的组件名称。baseDir,dataDir: 应用 APK 文件和数据目录的路径。stateNotNeeded=true: 一个 AMS 内部的优化标志。componentSpecified=true: 表明启动 Intent 中明确指定了组件名称。mActivityType=home: Activity 的类型,这里明确是home类型。compat={240dpi always-compat}: 兼容性信息,包括屏幕密度(240dpi)和兼容模式。theme=0x7f12000c: 应用到此 Activity 的主题资源 ID。mLastReportedConfigurations,mOverrideConfig,CurrentConfiguration,RequestedOverrideConfiguration: 这些字段详细描述了应用于此 Activity 的各种配置信息,包括:mGlobalConfig: 全局设备配置。mOverrideConfig: 应用于此 Activity 的覆盖配置(可能因窗口模式、显示区域等而不同)。CurrentConfiguration: 当前实际生效的配置。RequestedOverrideConfiguration: Activity 请求的覆盖配置。- 内部包含信息如:屏幕密度 (
dpi)、尺寸 (swdp,wdp,hdp)、屏幕方向 (land)、区域语言 (en_US)、日夜模式 (night)、窗口配置 (winConfig- 包含窗口边界mBounds、应用可用边界mAppBounds、最大边界mMaxBounds、显示旋转mDisplayRotation、窗口模式mWindowingMode、Activity类型mActivityType等)。s.X表示配置的序列号。
taskDescription: ...: 应用为最近任务界面提供的描述信息,包括标签 (label)、图标 (icon)、主颜色 (primaryColor)、背景色 (backgroundColor)、状态栏颜色 (statusBarColor)、导航栏颜色 (navigationBarColor) 等。launchFailed=false,launchCount=0,lastLaunchTime=-5m49s837ms: 启动失败标志、启动次数、上次启动时间(相对于 dumpsys 执行时间)。mHaveState=false,mIcicle=null: 是否有保存的实例状态 (onSaveInstanceState) 数据。null表示没有。state=RESUMED: Activity 当前的生命周期状态。RESUMED表示 Activity 在前台,用户可以交互。delayedResume=false,finishing=false,keysPaused=false,inHistory=true,idle=true: 其他内部状态标志,表示是否延迟恢复、是否正在结束、按键是否暂停、是否在历史栈中、是否空闲。occludesParent=true: 此 Activity 是否完全遮挡了它下面的 Activity。noDisplay=false: Activity 是否没有界面显示。immersive=false: 是否处于沉浸模式。launchMode=2: 在 Manifest 中定义的启动模式。2通常对应singleTask(对于 Launcher 来说很常见)。mImeInsetsFrozenUntilStartInput=true: 与输入法窗口 (IME) Insets 相关的内部标志。windows=[Window{...}]: 与此 Activity 关联的 WindowManager 窗口列表。windowType=2: 窗口类型,2通常是基础应用窗口 (TYPE_BASE_APPLICATION)。mOccludesParent=true: 重复的遮挡标志。overrideOrientation,requestedOrientation: 覆盖的屏幕方向和请求的屏幕方向。UNSPECIFIED表示未指定。mVisibleRequested=true,mVisible=true,mClientVisible=true,reportedDrawn=true,reportedVisible=true: 各种内部维护的可见性和绘制状态标志。mNumInterestingWindows=1,mNumDrawnWindows=1,allDrawn=true,lastAllDrawn=false: 与窗口绘制完成状态相关的标志。allDrawn=true表示所有重要窗口都已绘制完成。startingData=null: 启动窗口(Starting Window)的数据,null表示没有或已结束。firstWindowDrawn=true: 第一个窗口是否已绘制。mIsExiting=false: Activity 是否正在执行退出动画。nowVisible=true,lastVisibleTime=-1m25s655ms: 当前是否可见,以及上次可见的时间。connections={...}: 与此 Activity 关联的服务连接。这里显示连接到了TouchInteractionService,这是 Quickstep 手势导航服务。resizeMode=RESIZE_MODE_RESIZEABLE: Activity 的尺寸调整模式,表明它是可调整大小的。mLastReportedMultiWindowMode=false,mLastReportedPictureInPictureMode=false: 上次报告的多窗口/画中画模式状态。supportsSizeChanges=SIZE_CHANGES_UNSUPPORTED_METADATA: 指示如何支持尺寸变化。configChanges=0xdf3: Activity 在 Manifest 中声明的android:configChanges属性的位掩码值,表示它可以自行处理哪些配置更改而无需重建。neverSandboxDisplayApis=false,alwaysSandboxDisplayApis=false: 与 Display API 沙盒化(一种兼容性措施)相关的标志。areBoundsLetterboxed=false: 当前是否处于 Letterbox 模式(为了兼容性而在屏幕上显示黑边)。mCameraCompatControlState=hidden,mCameraCompatControlEnabled=false: 与摄像头兼容性处理(针对屏幕挖孔、刘海等的特殊处理)相关的状态和启用标志。
总的来说,这段信息非常详细地记录了 Launcher 这个 Home 应用 Activity 在特定时刻的运行状态、配置、窗口信息、生命周期、所属任务等关键信息,是调试和分析 Android 应用行为和系统状态的重要依据。
