1、问题描述
android5.1+kernel3.10环境下,手机下载软件,首次开机(1/500)低概率定屏在android开机动画最后一帧,旋转屏幕会出现开机向导部分界面。此问题,adb可以连接,按键有反应。
2、问题分析
拿到问题后,与客户沟通,确认adb可以连接,按键有反应,屏幕可以正常亮灭,system_sever正常、kernel工作正常,动画卡在最后一张图片播放未完成,开始认为是bootanimation模块异常,逻辑有问题联系模块处理。模块分析后认为bootanimation流程无异常,从log上看也无明显异常点。模块添加log请客户复现问题。确认是bootanimation流程没有走完,进入sleep,导致最后一张图片没有播放完,无法退出动画进程,经过log分析是frameDuration变量异常导致动画无法退出,在bool BootAnimation::movie()函数中模块添加log如下:
nsecs_t frameDuration = s2ns(1) /animation.fps; __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,"msn---bootani---start--frameDuration=%lld===animation.fps==%lld",frameDuration/1000000,animation.fps); for (size_t i=0 ;i<pcount ; i++) { for (int r=0 ; !part.count ||r<part.count ; r++) { for (size_t j=0 ; j<fcount&& (!exitPending() || part.playUntilComplete) ; j++) { …… nsecs_t delay = frameDuration - (now - lastFrame); +__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,"msn---bootani---f23--frameDurationlld==%lld",frameDuration); +__android_log_print(ANDROID_LOG_ERROR,LOG_TAG, "msn---bootani---f23--delaylld== %lld",delay); +__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,"msn---bootani---f23--lastFramelld==%lld",lastFrame); lastFrame = now; +__android_log_print(ANDROID_LOG_ERROR,LOG_TAG, "msn---bootani---f24-- %lld", frameDuration); |
log输出如下:
下面是正常log输出是frameDuration变量的值 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--frameDuration==0.000000 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--frameDurationlld==125000000 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--delay== 0.000000 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--delaylld== 85754394 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--lastFrame== 0.000000 01-02 08:46:53.931 258 329 E BootAnimation: msn---bootani---f23--lastFramelld== 196218922118 异常log输出如下: 01-02 08:46:54.282 258 329 E BootAnimation: msn---bootani---f23--frameDuration== -144.312836 01-02 08:46:54 |