anr互相锁导致重启的问题

文章描述了一个Android系统中关于线程同步的问题,具体涉及到Binder通信、ActivityManagerService以及锁的持有情况。线程11和13在尝试获取相同的锁时出现阻塞,导致潜在的系统性能影响。解决方法是调整代码以避免这种锁竞争。
摘要由CSDN通过智能技术生成


"Binder:1120_2" prio=5 tid=11 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12e803c8 self=0xb4000074c87b2140
  | sysTid=1135 nice=-2 cgrp=default sched=0/0 handle=0x7344c15cc0
  | state=S schedstat=( 3915851212 2094093366 9320 ) utm=287 stm=103 core=0 HZ=100
  | stack=0x7344b1e000-0x7344b20000 stackSize=995KB
  | held mutexes=
  at com.android.server.wm.ActivityTaskManagerService$LocalService.getTopApp(ActivityTaskManagerService.java:7232)
  - waiting to lock <0x0567c607> (a com.android.server.wm.WindowManagerGlobalLock) held by thread 13
  at com.android.server.am.ActivityManagerService.getTopAppLocked(ActivityManagerService.java:18132)
  at com.android.server.am.OomAdjuster.updateOomAdjLocked(OomAdjuster.java:381)
  at com.android.server.am.ActivityManagerService.updateOomAdjLocked(ActivityManagerService.java:18386)
  at com.android.server.am.ActivityManagerService.updateProcessForegroundLocked(ActivityManagerService.java:18125)
  at com.android.server.am.ActiveServices.updateServiceForegroundLocked(ActiveServices.java:1844)
  at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1556)
  at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1024)
  at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:15275)
  - locked <0x0576ae66> (a com.android.server.am.ActivityManagerService)
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3152)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2940)
  at android.os.Binder.execTransactInternal(Binder.java:1154)
  at android.os.Binder.execTransact(Binder.java:1123)

"android.fg" prio=5 tid=12 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12e80440 self=0xb4000074c87b58e0
  | sysTid=1138 nice=0 cgrp=default sched=0/0 handle=0x72f0d51cc0
  | state=S schedstat=( 2746916600 933229324 4359 ) utm=234 stm=40 core=5 HZ=100
  | stack=0x72f0c4e000-0x72f0c50000 stackSize=1043KB
  | held mutexes=
  at com.android.server.am.ActivityManagerService.getUidProcessState(ActivityManagerService.java:8931)
  - waiting to lock <0x0576ae66> (a com.android.server.am.ActivityManagerService) held by thread 11
  at android.app.ActivityManager.getUidImportance(ActivityManager.java:3784)
  at com.android.server.location.AppForegroundHelper.getImportance(AppForegroundHelper.java:126)
  at com.android.server.location.LocationManagerService.requestLocationUpdates(LocationManagerService.java:1966)
  at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1179)
  - locked <0x091e9773> (a android.util.ArrayMap)
  at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1140)
  at com.android.server.location.gnss.GnssLocationProvider.handleRequestLocation(GnssLocationProvider.java:856)
  at com.android.server.location.gnss.GnssLocationProvider.access$2700(GnssLocationProvider.java:106)
  at com.android.server.location.gnss.GnssLocationProvider$ProviderHandler.handleMessage(GnssLocationProvider.java:2117)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loop(Looper.java:223)
  at android.os.HandlerThread.run(HandlerThread.java:67)
  at com.android.server.ServiceThread.run(ServiceThread.java:44)

"android.ui" prio=5 tid=13 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12e80528 self=0xb4000074c87b9080
  | sysTid=1139 nice=-2 cgrp=default sched=0/0 handle=0x72efc47cc0
  | state=S schedstat=( 4170421097 900289916 12921 ) utm=298 stm=118 core=2 HZ=100
  | stack=0x72efb44000-0x72efb46000 stackSize=1043KB
  | held mutexes=
  at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:16929)
  - waiting to lock <0x0576ae66> (a com.android.server.am.ActivityManagerService) held by thread 11
  at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1115)
  at com.android.server.wm.DisplayPolicy$2.onSwipeFromBottom(DisplayPolicy.java:522)
  - locked <0x0567c607> (a com.android.server.wm.WindowManagerGlobalLock)
  at com.android.server.wm.SystemGesturesPointerEventListener.onPointerEvent(SystemGesturesPointerEventListener.java:170)
  at com.android.server.wm.PointerEventDispatcher.onInputEvent(PointerEventDispatcher.java:53)
  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
  at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native method)
  at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:200)
  at android.view.InputEventReceiver.onBatchedInputEventPending(InputEventReceiver.java:153)
  at android.os.MessageQueue.nativePollOnce(Native method)
  at android.os.MessageQueue.next(MessageQueue.java:335)
  at android.os.Looper.loop(Looper.java:183)
  at android.os.HandlerThread.run(HandlerThread.java:67)
  at com.android.server.ServiceThread.run(ServiceThread.java:44)
  at com.android.server.UiThread.run(UiThread.java:45)
 

注意关键字 "Binder:1120_2" prio=5 tid=11 Blocked

waiting to lock <0x0576ae66> (a com.android.server.am.ActivityManagerService) held by thread 11

线程11和13互相锁住了,对应代码把上锁的地方去掉就解决问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海蓝光科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值