当前位置: 首页 > news >正文

dumpsys activity activities中的Task和ActivityRecord信息解读

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

recents
下面的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。

整体结构

输出内容大致分为两个层级:

  1. Task 层级: 代表一个应用程序的任务栈。这里显示了两个 Task,Task #1 和 Task #6。Task #6 是我们主要关注的,因为它包含了 Launcher 的 Activity。
  2. 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_MAINCATEGORY_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 应用行为和系统状态的重要依据。

相关文章:

  • 【Linux网络】应用层自定义协议与序列化及Socket模拟封装
  • 2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888
  • Trae 编程工具 Cline 插件安装与 Claude 3.7 API Key 自定义配置详解
  • 济南国网数字化培训班学习笔记-第二组-6-输电线路现场教学
  • 热度大幅度下降,25西电经济与管理学院(考研录取情况)
  • html单页业务介绍源码
  • RuntimeError: “unfolded2d_copy“ not implemented for ‘Half‘
  • 从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践
  • 跑MPS产生委外采购申请(成品)
  • 线程同步与互斥(互斥)
  • Vue.js 的组件化开发指南
  • 【k8s】KubeProxy 的三种工作模式——Userspace、iptables 、 IPVS
  • 如何应对客户提出的不合理需求
  • 第四章: 服务集成抽象
  • 3.ArkUI Image的介绍和使用
  • JSX介绍
  • django admin 添加自定义页面
  • C++学习:六个月从基础到就业——STL算法(三)—— 数值算法(上)
  • Linux电源管理(四),设备的Runtime Power Management(RPM)
  • 网络知识:路由器静态路由与动态路由介绍
  • 经济日报:美离间国际关系注定徒劳无功
  • 目前中美未进行任何经贸谈判,外交部、商务部再次表明中方立场
  • 云南大理州洱源县发生4.8级地震,震源深度10千米
  • 灰鹦鹉爆粗口三年未改?云南野生动物园:在持续引导
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 世界读书日丨人均一年超10本!你达到上海平均阅读水平了吗