一、问题现象
1、用户直观看到的现象是黑屏。
2、出问题时StatusBar、NavigationBar和墙纸消失。
3、大部分发生在FOTA重启之后,出现概率很低。
Platform:MSM8916
Android版本:5.0.2L
BuildType:user
系统软件版本:VA6V+L5V0
系统RAM:1GB
参考机行为:
1、5.0L的Nexus4和5.1L的Nexus5都没有重现此问题。
二、解决方案
通过初步分析、深入分析(具体分析过程、关键代码和log在下面会附上)我们清楚的知道了问题发生的原因:
1、开机初始化的过程中需要获取camera的相关参数,获取的过程中会以api级别打开camera(用户不可见的形式打开)然后快速关闭
2、在打开的过程中会开启一个Thermal deamon 线程进行thermal相关的处理,然后关闭时会等待这个thermal deamon线程退出
3、这个线程开启的时候会通过异步的方式执行一次thermal相关的处理,并等待结果返回, 执行的方式是多线程异步处理
在当前代码的执行状态下有一定概率(很小,只有开机或者重启时走这个流程)出现因为调度原因而先执行了closecamera的操作并先删除了异步处理结果的链表,然后等待thermal deamon线程退出,从而导致thermal deamon被唤醒时异步处理结果的链表已经被删除而出现死结。一旦死结产生,