在实际开发过程中,需要经常查看activity的调用栈信息,经常用到adb shell dumpsys activity activities这个命令,下面对这个命令做一下简要分析:
通过执行上面命令,可以得到类似如下格式的信息:
Stack #45: type=standard mode=fullscreen
isSleeping=false
mBounds=Rect(0, 0 - 0, 0)
......
Stack #0: type=home mode=fullscreen
isSleeping=false
mBounds=Rect(0, 0 - 0, 0)
......
Stack #1: type=recents mode=fullscreen
isSleeping=false
mBounds=Rect(0, 0 - 0, 0)
......
其中每个Stack开始代表一个App的活动栈,每个活动栈有一个id,如上所示的Stack #45中的45。
android系统中目前定义了两种类型的Stack,系统预定义的静态栈,总共有五种,如下所示:
0 HOME_STACK_ID:Home应用以及recents app所在的栈
1 FULLSCREEN_WORKSPACE_STACK_ID:一般应用所在的栈
2 FREEFORM_WORKSPACE_STACK_ID:类似桌面操作系统
3 DOCKED_STACK_ID:分屏
4 PINNED_STACK_ID:画中画栈
另一种栈,是系统动态生成的,它的id就是大于4
Stack信息分析
我们抽取dump出的一个stack进行分析: