Android System ANR caused SWT restart issue

本文分析了Android系统中由于AudioService的synchronized方法导致的ANR和系统重启问题。通过深入的线程分析和代码审查,发现由于线程间同步锁粒度过大引发的死锁。解决方案是更换同步锁类型,使用类的全局锁来避免死锁,虽然可能轻微影响执行效率,但在实际场景中影响甚微。
摘要由CSDN通过智能技术生成

一、问题现象

1、用户直观看到的现象是System先ANR。

2、ANR之后系统重启。

测试方法:

在录音的界面不停的滑动音量进度条,同时座机给测试机打电话,电话没有接通,只见界面冻结,弹出ANR,接着系统重启。

Platform:MT6732

Android版本:4.4.4KK

BuildType:user

系统软件版本:SWA3A+UMA0

系统RAM:1GB

问题概率:≈2%

参考机行为:

1、低概率问题,暂无参考机行为

二、解决方案

通过初步分析、深入分析(具体分析过程、关键代码log下面会附上)我们清楚的知道了问题发生的原因:

1、SystemServer进程中的AudioService相关的setindexgetindex方法会在多个Thread中进行,这些方法都是以synchronized关键字声明的,即这些方法会以类的每个实例中的lock进行多线程同步。

2、这些synchronized的方法存在穿插调用其他同类型实例synchronized方法的行为

3、

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值