一、问题现象
1、用户直观看到的现象是System先ANR。
2、ANR之后系统重启。
测试方法:
在录音的界面不停的滑动音量进度条,同时座机给测试机打电话,电话没有接通,只见界面冻结,弹出ANR,接着系统重启。
Platform:MT6732
Android版本:4.4.4KK
BuildType:user
系统软件版本:SWA3A+UMA0
系统RAM:1GB
问题概率:≈2%
参考机行为:
1、低概率问题,暂无参考机行为。
二、解决方案
通过初步分析、深入分析(具体分析过程、关键代码和log在下面会附上)我们清楚的知道了问题发生的原因:
1、SystemServer进程中的AudioService相关的setindex和getindex等方法会在多个Thread中进行,而这些方法都是以synchronized关键字声明的,即这些方法会以类的每个实例中的lock进行多线程同步。
2、这些synchronized的方法中存在穿插调用其他同类型实例的synchronized方法的行为。
3、