问题描述:
项目最近软件下载进去后会出现概率性无法开机,主要表现为一直卡在开机动画界面,有时2个小时后能正常开机。
对应CR 为SPCSS00383586。
分析说明:
提供的异常log可以看到,在开始播放开机动画之后:
[ 12.198394] c3 init: Starting service 'bootanim'...
始终未执行到SurfaceFlinger::bootFinished()去设置service.bootanim.exit,因而bootanimiation未能结束,
一直卡在开机动画。
问题原因:
合入Google 2月份SecurityPatch之后,registerContentObserver会调用AMS#checkContentProviderAccess,其中会持有AMS锁,属于新增持锁逻辑。
与5.1\6.0 Android大版本中的 Lock Task 相关的逻辑冲突,
在开机时,PhoneWindowManager#setInitialDisplaySize 持有 mWindowMap 锁,在这其中调用下面逻辑可能有与AMS互锁风险,如下:
问题影响:
一旦发生概率性死锁,就会存在卡在开机动画无法正常开机的现象,
包括下载完第一次开机、正常手机开机过程中都有可能概率性发生出现。