anr互相锁导致重启的问题

  • Post author:
  • Post category:其他



“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互相锁住了,对应代码把上锁的地方去掉就解决问题了。



版权声明:本文为knuth原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。