问题背景
在桌面转屏发现响应不够迅速,对比其他产品有很大的提升空间,针对此问题进行了一些分析和优化。
问题分析和解决方法
首先简单介绍一下旋转屏幕的流程,首先各个界面要进行重绘,在重绘过程中要进行冻屏,只有所有Window
都进行绘制完成了才进行转屏,因此这里面就有个木桶效应,转屏的时间取决于重绘最慢的那个。
首先分析Log,找出可以优化的点:
adb shell dumpsys window -d enable 10
adb logcat -v threadtime -s WindowManager | grep -E "Screen frozen for|Dismissing screen|Orientation start waiting for draw|Orientation not waiting for draw"
adb shell dumpsys window -d enable 10
是使能DEBUG_ORIENTATION
,开启打印转屏相关的Log。
WindowManager: Orientation start waiting for draw mDrawState=DRAW_PENDING in Window{
249e41f u0 StatusBar}, surface Surface(name=StatusBar)
WindowManager: Orientation start waiting for draw mDrawState=DRAW_PENDING in Window{
731dc6a u0 com.android.launcher/com.android