android R版本常见dump信息分析

  • adb shell dumpsys activity activities

  • Display #:屏幕的displayId,默认主屏是0,堆栈在display上自上而下输出,越往上越在栈顶图层越在上
  • RootTask #:根栈的taskId,原生非分屏场景的RootTask就是Task本身,也就是RootTask并没有包含嵌套其他子栈
  • type=:栈类别,一般应用栈是standard,桌面是home    mode=:窗口模式,全屏是fullscreen,原生悬浮窗是freeform、分屏是split-screen-primary和split-screen-secondary,若窗口类型是厂商自定义,可能输出不同的自定义值
  • mBounds=:Task的大小范围,全屏栈值都是0,分屏、悬浮窗才有值  
  • mResumedActivity:栈中当前resume的activity
  • mLastPausedActivity:栈中当前pause的activity
  • * Task{2ad2d3b #158 type=standard A=10212:com.tencent.qqlive U=0 visible=true mode=freeform translucent=false sz=2}         RootTask的子Task信息(非分屏场景的RootTask就是Task本身,从taskId上可以看出),158是taskId,类型是普通应用,uid是10212,包名(进程名)是com.tencent.qqlive,用户id是0即主用户,窗口模式是悬浮窗,非透明栈,栈内有2个activity对象
  • affinity=:区别栈的亲和度,默认不配置就是包名,affinity可以使得一个应用内部的activity分属多个栈
  • intent=:表示启动该栈首个activity使用的intent
  • Activities=:表示task内部的activity集合,末尾的activity是栈顶的activity
  • mRootProcess=ProcessRecord{c3a5ced 3866:com.tencent.qqlive/u0a212} :root process表示栈根activity的进程(一个栈可能存在不同进程的activity),3866是进程id,u0a212是主用户下uid为10212的包
  • mResizeMode=:栈是否resizeable,决定栈能否支持多窗口
  • * Hist #:打印栈内每个activity的信息
  • packageName=:表明该activity所在包,processName=:表明该activity所在进程
  • launchedFromUid=:表明activity被哪个uid的包所启动(activity拉起溯源的关键信息)
  • Intent {:表示启动activity所用的intent,栈内根activity的这个intent与启动task的intent等同
  • baseDir=:表示activity所在包的安装路径, dataDir=:表明进程数据所在路径
  • CurrentConfiguration=:表明activity的当前的config信息     state=:表明activity的当前生命周期状态
  • idle=:表明该activity是否执行完onResume生命周期且回调系统侧刷新activity的idle状态,部分应用hook应用进程的一些调度后会导致该状态无法置true进而导致一些切换场景的问题
  • windows=:打印activity对应的window对象信息
  • mOrientation=:activity所请求的orientation值(Activity.setRequestedOrientation动态请求或者AndroidManifest.xml给activity节点静态配置android:screenOrientation值)
  • mVisible=:表明activity在系统侧是否已经设置visibile     mClientVisible=:表明是否通知应用端刷新activity窗口可见性
  • reportedDrawn=:表明activity的窗口是否绘制完毕
  • maxAspectRatio=:用于高长宽比全面屏使用,表明activity是否可以充满屏幕(targetsdk大于等于O的不配置默认满屏)
  • minAspectRatio=:用于低长宽比的折叠屏展开态使用,表明activity是否可以充满屏幕(S版本开始不配置默认满屏)
  • configChanges=:十六进制值,表明activity在AndroidManifest中配置的android:configChanges属性值,字符串与十六进程值对应关系参见ActivityInfo类,该值决定config发生变化时activity走relaunch还是onConfigurationChanged
  • adb shell dumpsys window windows

  • Window #:打印每个window的窗口信息,即WindowState对象,在dump信息中搜索窗口的关键字就搜这个
  • mDisplayId=:window所在displayId
  • rootTaskId=:window所在task的taskId(若是分屏窗口,则该taskId是分屏的根taskId,不是window所在task的taskId)
  • mOwnerUid=:窗口所在应用的uid   showForAllUsers=:窗口是否在所有用户下可见(attrs.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS可以达到窗口在所有用户下可见的目的)
  • package=:窗口所在应用包名
  • mAttrs=:应用指定的窗口起点和宽高
  • adjust=:反映的是窗口属性中的softInputMode值,作用于输入法弹出时窗口布局刷新
  • layoutInDisplayCutoutMode=:反映窗口是否需要使用挖孔(挖孔屏)、曲边(曲面屏),常量值在WindowManager中
  • ty=:窗口类型,比如应用窗口、输入法、壁纸之类的,常量值在WindowManager类中定义
  • fl=:窗口指定的flags,比如要透壁纸的SHOW_WALLPAPER   pfl=:窗口指定的privateFlags
  • vsysui=:作用于窗口是否显示导航栏和状态栏及其状态
  • Requested w= h=:请求的窗口宽高
  • mActivityRecord=:窗口对应的activity
  • mViewVisibility=:窗口可见性, 0x0是visible, 0x4是invisible,0x8是gone
  • mFullConfiguration=:窗口当前的config信息
  • mHasSurface=:窗口是否已创建surface
  • mFrame=:窗口的最终大小
  • WindowStateAnimator{:打印窗口对应的WindowStateAnimator对象
  • mSurface=:窗口对应的图层surface
  • shown=:表示图层是否显示
  • mDrawState=:窗口的绘制状态,应用若正常绘制完成状态应该为HAS_DRAWN
  • isVisible=:表明窗口是否可见
  • adb shell dumpsys SurfaceFlinger

一般查看图层dump信息按照以下步骤操作:

1 、在dump文件中先搜索关键字 HWC layers 找到所有可见图层
  • Display 0 HWC layers:该节点下展示所有可见图层大小和位置信息(图层的可见区域一定是屏幕内的区域)
  • Layer name:表示图层名字
  • Window Type:窗口类型,比如应用窗口、输入法、壁纸之类的,常量值在WindowManager类中定义
  • Comp Type:表示图层合成方式,DEVICE表示GPU硬件合成、CLIENT表示CPU软件合成
  • Disp Frame:表示图层的位置(left、top、right、bottom)

2、找到目标图层并搜索图层名字

比如腾讯视频悬浮窗页面com.tencent.qqlive/com.tencent.qqlive.ona.activity.VideoDetailActivity#0,然后搜索该关键字找到图层bufferlayer

  • BufferStateLayer:图层bufferlayer是个BufferStateLayer, bufferlayer的父图层及以上节点都是ContainerLayer
  • Region VisibleRegion:指的是图层在屏幕内的可见区域
  • z=:图层的z轴顺序,也就是层级高低,值越大越高,不过不同应用栈的activity窗口层级比较,需要上溯到EffectLayer (Task=这个父图层去比较,看activity所在Task在TaskDisplayArea上的z值大小。
  • pos:图层起点
  • size=:图层大小
  • crop:图层裁剪区域(left,top,width,height)
  • cornerRadius=:图层圆角浮点值
  • tr=:图层缩放比
  • parent=:图层父节点
  • zOrderRelativeOf=:层级相对节点图层
  • metadata=:图层携带的metadata键值属性
  • shadowRadius=:图层的四周阴影半径,R版本开始SurfaceControl支持直接给图层设置阴影半径

WindowStateAnimator(WindowSurfaceController)

 3、从BufferStateLayer可以一级级通过parent属性值往上溯源查看父节点ContainerLayer图层信息

WindowState ActivityRecord Task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值