问题点:
在播放完关机动画的时候会出现一个动画之前的界面,比如我在锁屏界面长按power键关机,等关机动画播放完后会闪现一下刚才的锁屏界面,如果是在home界面或是某个应用界面关机,等播完动画之后也会闪现一下之前的home界面或那个应用界面,而且问题必现。
分析:
该问题在之前负责开关机模块的同事那里已经分析过,后经排查发现和移植的圆角功能有关,而圆角功能是我这边移植的,所以问题转到我这了。
圆角的整个feature是有开关控制的,一个是上层的prop开关persist.tcf.screen.corner,一个是native层的宏开关TINNO_CUSTOM_FEATURE_SCREEN_CAPTURE_EXCLUDE_SCREEN_CORNER,拿到问题之后我做了个初步验证:
1. 通过adb命令将persist.tcf.screen.corner设置为0,也就是关掉开关。重启手机后圆角的效果没有了,但是问题依旧存在。
2. 将TINNO_CUSTOM_FEATURE_SCREEN_CAPTURE_EXCLUDE_SCREEN_CORNER宏去掉,编译验证,问题消失。
由此可以得出结论是由于TINNO_CUSTOM_FEATURE_SCREEN_CAPTURE_EXCLUDE_SCREEN_CORNER这个宏定义导致的问题。而这个宏的作用是什么呢?其实就是处理截屏的。就是说在截屏的时候我们需要将圆角去掉,否则截出来的图片会有明显的四个圆角,不好看。
代码分析:
再看下对应的代码:
android/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:
#ifdef TINNO_CUSTOM_FEATURE_SCREEN_CAPTURE_EXCLUDE_SCREEN_CORNER
{
// this value fromandroid.view.WindowManager.LayoutParams.TYPE_SCREEN_CORNER -FIRST_SYSTEM_WINDOW * 10000
// some other app also needcaptureScreen for some Animation
//ALOGE("captureScreenImplLockedreqWi