adb shell dumpsys activity activities
输出涉及到了解 Android 活动管理器(Activity Manager)的当前状态,以及系统中运行的活动和任务的详细信息。这是系统中活动(Activities)、任务(Tasks)、堆栈(Stacks)等的管理和状态快照,对于调试和理解应用行为非常有用。下面是对提供的内容的详细解释:
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
Stack #0: type=home mAboveHome=false mode=fullscreen
isSleeping=false
mBounds=Rect(0, 0 - 0, 0)
Task id #1
mBounds=Rect(0, 0 - 0, 0)
mMinWidth=-1
mMinHeight=-1
mLastNonFullscreenBounds=null
* TaskRecord{43459e7 #1 I=com.bbk.launcher2/.Launcher U=0 DislayId=0 StackId=0 sz=1}
userId=0 effectiveUid=u0a133 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10a00100 cmp=com.bbk.launcher2/.Launcher}
mActivityComponent=com.bbk.launcher2/.Launcher
autoRemoveRecents=false isPersistable=false numFullscreen=1 activityType=2
rootWasReset=true mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE
Activities=[ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}]
askedCompatMode=false inRecents=true isAvailable=true
stackId=0
hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE mTaskRecordSupportsPictureInPicture=false isResizeable=true lastActiveTime=392262515 (inactive for 3s)
* Hist #0: ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}
packageName=com.bbk.launcher2 processName=com.bbk.launcher2
launchedFromUid=0 launchedFromPackage=null userId=0
app=ProcessRecord{d694814 2828:com.bbk.launcher2/u0a133}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10a00100 cmp=com.bbk.launcher2/.Launcher (has extras) }
frontOfTask=true task=TaskRecord{43459e7 #1 I=com.bbk.launcher2/.Launcher U=0 DislayId=0 StackId=0 sz=1}
taskAffinity=null
mActivityComponent=com.bbk.launcher2/.Launcher
baseDir=/data/app/com.bbk.launcher2-sBWtpnvqTArAKLOq4ZHohA==/base.apk
dataDir=/data/user_de/0/com.bbk.launcher2
stateNotNeeded=true componentSpecified=false mActivityType=home
compat={480dpi} labelRes=0x7f110245 icon=0x7f0800e9 theme=0x7f12013f
mLastReportedConfigurations:
mGlobalConfig={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 -
1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATIO
N_0} s.111 themeId=34 nightModeLevel = -1}
mOverrideConfig={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0
- 1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0
} s.10 themeId=34 nightModeLevel = -1}
CurrentConfiguration={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0
, 0 - 1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATI
ON_0} s.62 themeId=34 nightModeLevel = -1}
RequestedOverrideConfiguration={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 mDisplayWindowingMode=undefined mActivityType=home mAlwaysOnTop=undefined mRotat
ion=undefined} themeId=0 nightModeLevel = -1}
taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=ff222222
backgroundColor=ff000000
statusBarColor=0
navigationBarColor=0
launchFailed=false launchCount=0 lastLaunchTime=-1d21h31m39s998ms
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=2
frozenBeforeDestroy=false forceNewConfig=false
mActivityType=home
nowVisible=true lastVisibleTime=-25s281ms
connections=com.android.server.wm.ActivityServiceConnectionsHolder@d58d994
resizeMode=RESIZE_MODE_RESIZEABLE
mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false
Running activities (most recent first):
TaskRecord{43459e7 #1 I=com.bbk.launcher2/.Launcher U=0 DislayId=0 StackId=0 sz=1}
Run #0: ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}
mResumedActivity: ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}
Stack #402: type=standard mAboveHome=false mode=fullscreen
isSleeping=false
mBounds=Rect(0, 0 - 0, 0)
Task id #99900235
mBounds=Rect(0, 0 - 0, 0)
mMinWidth=-1
mMinHeight=-1
mLastNonFullscreenBounds=null
* TaskRecord{e10ea43 #99900235 A=com.tencent.mm U=999 DislayId=0 StackId=402 sz=1}
userId=999 effectiveUid=u999a210 mCallingUid=u0a133 mUserSetupComplete=true mCallingPackage=com.bbk.launcher2
affinity=com.tencent.mm
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.tencent.mm/.ui.LauncherUI}
mActivityComponent=com.tencent.mm/.ui.LauncherUI
autoRemoveRecents=false isPersistable=true numFullscreen=1 activityType=1
rootWasReset=true mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE
Activities=[ActivityRecord{45cffba u999 com.tencent.mm/.ui.LauncherUI d0 s402 t99900235}]
askedCompatMode=false inRecents=true isAvailable=true
mRootProcess=ProcessRecord{b5ecbf0 22860:com.tencent.mm/u999a210}
stackId=402
hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE mSupportsPictureInPicture=false isResizeable=true lastActiveTime=391606546 (inactive for 659s)
* Hist #0: ActivityRecord{45cffba u999 com.tencent.mm/.ui.LauncherUI d0 s402 t99900235}
packageName=com.tencent.mm processName=com.tencent.mm
launchedFromUid=10133 launchedFromPackage=com.bbk.launcher2 userId=999
app=ProcessRecord{b5ecbf0 22860:com.tencent.mm/u999a210}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[242,2086][434,2445] }
frontOfTask=true task=TaskRecord{e10ea43 #99900235 A=com.tencent.mm U=999 DislayId=0 StackId=402 sz=1}
taskAffinity=com.tencent.mm
mActivityComponent=com.tencent.mm/.ui.LauncherUI
baseDir=/data/app/com.tencent.mm-_nyo-EAY86WWW9ZjBRZPXQ==/base.apk
dataDir=/data/user/999/com.tencent.mm
stateNotNeeded=false componentSpecified=true mActivityType=standard
compat={480dpi} labelRes=0x7f110e29 icon=0x7f0d0001 theme=0x7f12029d
mLastReportedConfigurations:
mGlobalConfig={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 -
1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATIO
N_0} s.2836 themeId=34 nightModeLevel = -1}
mOverrideConfig={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0
- 1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATI
ON_0} s.1 themeId=34 nightModeLevel = -1}
CurrentConfiguration={1.25007 460mcc11mnc [zh_CN] ldltr sw360dp w360dp h730dp 480dpi nrml long hdr widecg port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0
, 0 - 1080, 2400) mAppBounds=Rect(0, 76 - 1080, 2274) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=RO
TATION_0} s.1 themeId=34 nightModeLevel = -1}
taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=ff212121
backgroundColor=fffafafa
statusBarColor=ff000000
navigationBarColor=ff000001
launchFailed=false launchCount=0 lastLaunchTime=-9m10s39ms
haveState=true icicle=Bundle[mParcelledData.dataSize=192]
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=1
frozenBeforeDestroy=false forceNewConfig=false
mActivityType=standard
nowVisible=false lastVisibleTime=-9m8s646ms
resizeMode=RESIZE_MODE_RESIZEABLE
mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false
Running activities (most recent first):
TaskRecord{e10ea43 #99900235 A=com.tencent.mm U=999 DislayId=0 StackId=402 sz=1}
Run #0: ActivityRecord{45cffba u999 com.tencent.mm/.ui.LauncherUI d0 s402 t99900235}
mLastPausedActivity: ActivityRecord{45cffba u999 com.tencent.mm/.ui.LauncherUI d0 s402 t99900235}
ResumedActivity:ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}
ResumedActivity: ActivityRecord{9e9d3b4 u0 com.bbk.launcher2/.Launcher d0 s0 t1}
ActivityStackSupervisor state:
topDisplayFocusedStack=ActivityStack{b8dd0c6 displayId=0 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks}
displayId=0 stacks=2
mHomeStack=ActivityStack{b8dd0c6 displayId=0 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks}
mPreferredTopFocusableStack=ActivityStack{b8dd0c6 displayId=0 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks}
mLastFocusedStack=ActivityStack{b8dd0c6 displayId=0 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks}
mCurTaskIdForUser={0=2427, 999=99900235}
mUserStackInFront={999=402}
isHomeRecentsComponent=true KeyguardController:
mKeyguardShowing=false
mAodShowing=false
mKeyguardGoingAway=false
Occluded=false DismissingKeyguardActivity=null at display=0
mDismissalRequested=false
mVisibilityTransactionDepth=0
LockTaskController
mLockTaskModeState=NONE
mLockTaskModeTasks=
mLockTaskPackages (userId:packages)=
u0:[]
u999:[]
1. Activity Manager Activities
这是活动管理器的一个快照,显示了系统中所有活动堆栈的当前状态。
2. Display #0
这代表设备的主显示屏。活动是从顶部到底部列出的。
3. Stack #0
这是一个类型为 home
的堆栈,意味着这个堆栈包含了主屏幕(Launcher)活动。
- type=home: 表明这是一个包含家庭(主屏幕)活动的堆栈。
- mode=fullscreen: 堆栈中的活动以全屏模式运行。
- isSleeping=false: 堆栈不在睡眠状态。
- mBounds: 表示活动的边界,在这个例子中为 0,说明堆栈充满整个显示屏。
4. Task Record
详细描述了一个任务的状态。
- Task id #1: 这是任务的唯一标识符。
- I=com.bbk.launcher2/.Launcher: 这是任务的主活动,即设备的启动器。
- userId=0: 运行此任务的用户ID。
- mCallingPackage=null: 启动这个任务的应用包名,在这个例子中没有指定。
- intent: 指明了启动这个活动的意图。在这里是启动主屏幕。
- mActivityComponent: 指定了活动组件的名称。
- autoRemoveRecents=false: 如果此任务被移出最近任务列表时是否自动删除。
- isPersistable=false: 是否可以将此任务保存到磁盘。
- activityType=2: 活动类型为2,通常代表主屏幕。
5. Activity Record
描述了在任务中运行的具体活动。
- packageName=com.bbk.launcher2, processName=com.bbk.launcher2: 活动的包名和进程名。
- frontOfTask=true: 活动位于任务的前端。
- visible=true: 活动当前可见。
- state=RESUMED: 活动当前处于恢复状态。
- nowVisible=true: 活动现在对用户可见。
- fullscreen=true : 活动在全屏模式下运行。
Hist #1和Hist #0表示Task内部栈存在的内容。当点击返回按钮时,Task中的当前Activity(Hist #1)会出栈(Task),得到新的栈顶(Hist #0)。
由于桌面应用没有在前台显示,因此其没有topResumeActivity. 而且其Task内部栈中只有一个元素Hist #0.
6. Running activities
列出了当前运行的活动,最近运行的活动排在最前面。
7. Resumed Activity
指出当前已恢复并处于活动状态的活动。在这里是主屏幕活动。
8. Stack #402 and Task #99900235
这部分描述了另一个堆栈和任务,相关于微信(com.tencent.mm),显示了微信主界面(LauncherUI)的状态。
9. ActivityStackSupervisor state
输出中的ActivityStackSupervisor state部分提供了有关活动堆栈监督器(ActivityStackSupervisor)的当前状态的详细信息。这个监督器是Android系统中负责管理所有活动堆栈的组件。以下是输出中各部分的详细解释:
ActivityStackSupervisor state:
topDisplayFocusedStack:
描述了当前具有焦点的顶部显示堆栈。在这个示例中,焦点堆栈是类型为home,模式为fullscreen的堆栈,可见且不透明。
displayId=0:表示这个堆栈在默认显示设备上。
stackId=0:堆栈的标识符。
visible=true:堆栈是可见的。
translucent=false:堆栈是不透明的。
displayId=0 stacks=2:
表示在显示ID为0的显示器上有2个活动堆栈。
mHomeStack, mPreferredTopFocusableStack, mLastFocusedStack:
这些都指向同一个堆栈,表明当前的主屏幕堆栈是焦点堆栈,也是最后一个有焦点的堆栈。
mHomeStack: 主屏幕堆栈。
mPreferredTopFocusableStack: 系统优先考虑的顶部可获得焦点的堆栈。
mLastFocusedStack: 最后一个获得焦点的堆栈。
mCurTaskIdForUser:
显示每个用户当前的任务ID。例如,用户0的当前任务ID是2427,用户999的当前任务ID是99900235。
mUserStackInFront:
显示每个用户前端显示的堆栈ID。对于用户999,前端堆栈是ID为402的堆栈。
isHomeRecentsComponent:
表明当前的home堆栈是否包含最近使用的应用组件,这里为true。
10. KeyguardController
关于设备锁屏控制器的状态信息,如是否正在显示锁屏等。
在Android操作系统中,ActivityStackSupervisor
、Stack
、Task
、TaskRecord
以及Activity
是关于如何管理和运行应用程序组件的核心概念。理解它们之间的关系对于深入了解Android的多任务处理和活动生命周期管理至关重要。
关系总结
- ActivityStackSupervisor 管理多个 Stacks。
- 每个 Stack 包含一个或多个 Task。
- 每个 Task (通过 TaskRecord 实现)包含一个或多个 Activity。
ActivityStackSupervisor
ActivityStackSupervisor
是一个高级管理组件,负责监督和协调设备上所有的 ActivityStacks
。它确保根据用户的交互以及当前的系统状态来合理地管理和调度每个活动。ActivityStackSupervisor
处理如活动的启动、恢复、暂停、停止和销毁等任务,并管理这些活动在各个 ActivityStack
中的布局。
Stack
在Android中,Stack
(通常被称为活动堆栈)是一组活动的集合,这些活动按照特定的顺序组织在一起,通常表示为一个堆栈数据结构,后进先出(LIFO)。每个堆栈都维护着自己的一组活动历史记录,这些活动按它们被打开的顺序来管理。用户在应用之间切换或在应用内部导航时,系统会通过 ActivityStack
来调整哪个活动应该显示在屏幕上。
Task
Task
是指一个逻辑任务,它包含一组彼此关联的活动,这些活动共同完成一个用户定义的任务。在Android多任务环境中,一个 Task
可以通过任务视图(如最近应用列表)中的一个条目来表示,用户可以切换到这个任务,或者移除这个任务。
每个 Task
通常开始于一个根活动,并可以包含多个活动,这些活动是用户在应用中进行交互时按顺序打开的。TaskRecord
是这个任务的具体实现,它记录了任务的状态,如活动的堆栈顺序、任务的配置(如全屏或多窗口模式)、以及任何与任务关联的其他元数据。
Activity
Activity
是Android中的一个应用组件,代表了一个单一的屏幕,用户可以在其中进行交互。每个活动都是独立的,但通常与其他活动协同工作来形成用户在应用中的完整体验。在 Task
和 Stack
的上下文中,活动是这些结构的基本构建块。
一般一个包名对应一个Task,可是如果某Activity启动模式设置为SingleInstance,则会为其单独创建一个Task,其中的ActivityStack中只有单独的Activity;
ActivityStack用来记录Activity历史,以便Back回退时仿佛在同一个应用中(事实也如此),直到回退到HomeActivity;
如果多个Activity的TaskAffinity相同,则认为是同一个任务,共享一个Task;
ActivityStack继承自Task,所以实际Task就是ActivityStack;
如果Activity的TaskAffinity不同,系统会新创建一个Task,在PcMode下就表现为创建了两个窗口;
TaskAffinity意为任务相关性,一般默认包名;
如果是不同进程,那么就会有不同Task。注意同一进程可以有多个Task(比如singleInstance这一特殊启动模式或者FLAG_NEW_TASK flag);
另外一个重要概念是Display,可以理解为手机屏幕进行划分,每个Display就拥有独立的多个Task,彼此没有联系;