[http://jira.it.chehejia.com/browse/XHMI-103352](https://prod-files-secure.s3.us-west-2.amazonaws.com/61f35fd0-f798-403b-bd25-9e0daf8b0eaf/02c0f10b-4d06-4255-bd30-bcb6ec527685/screenrecord.mp4)
http://jira.it.chehejia.com/browse/XHMI-103352
Force stop 或 kill 地图进程后,打开地图、返回桌面反复操作,最后打开地图后 SurfaceView 内容不显示。
Dump 信息的 activeBuffer=[2840x1360:2880,RGBx_8888]
表示地图应用给 SurfaceFlinger 传递的 buffer 是有效的,说明绘制没有问题。但 Region VisibleRegion (this=0 count=0)
表示该 layer 没有可见区域,所以不会参与合成。
上图也表示参与合成的 layer 中只有 MainActivity 的 layer,并没有 SurfaceView layer。所以现象是地图无内容。
VisibleRegion 空的其中一个原因是设置了 eLayerHidden
。对于 SurfaceView,在 SurfaceView.performSurfaceTransaction() 中根据可见性设置的。我们加 log 确认了,问题发生时没有设置 eLayerHidden
。
对比正常和异常的 dump 信息。
异常 dump
正常 dump
SurfaceView 的信息没有变化,但是它的相对层级,即 activity 的 layer 信息有不同。正常中 activity 的 isOpaque=0
,但异常中 activity 的 isOpaque=1
。Opaque 表示 layer 是否不透明,当 activity 的 isOpaque=1
说明 activity 不透明,所以在 activity 下层显示的 SurfaceView 的 visibleRegion
是空的。
问题在 Android 11 发现,而在 Android 12 中没有复现。所以我们先分析 Android 11 中 opaque 是如何设置的。