大家好,我最近遇到一个zygote crash的问题。经过我对log的分析,发现是因为inputdispatcher死锁导致的。然后我跟踪了ANR的信息,发现这么个锁的情况。
"ActivityManager" prio=5 tid=11 MONITOR
  | group="main" sCount=1 dsCount=0 obj=0x405054f0 self=0x333e50
  | sysTid=258 nice=-2 sched=0/0 cgrp=default handle=3358728
  at com.android.server.am.ActivityManagerService$2.handleMessage(ActivityManagerService.java:~1201)
  - waiting to lock <0x40505700> (a com.android.server.am.ActivityManagerService) held by threadid=25 (InputDispatcher)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:130)
  at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:1515)
"InputDispatcher" prio=10 tid=25 MONITOR
  | group="main" sCount=1 dsCount=0 obj=0x408bc4c8 self=0x64d428
  | sysTid=273 nice=-8 sched=0/0 cgrp=default handle=6592704
  at com.android.server.PackageManagerService.getPackageInfo(PackageManagerService.java:~1423)
  - waiting to lock <0x405bd1a0> (a java.util.HashMap) held by threadid=51 (Binder Thread #12)
  at com.android.server.am.ActivityManagerService.appendDropBoxProcessHeaders(ActivityManagerService.java:7170)
  at com.android.server.am.ActivityManagerService.addErrorToDropBox(ActivityManagerService.java:7221)
  at com.android.server.am.ActivityManagerService.appNotResponding(ActivityManagerService.java:3231)
  at com.android.server.am.ActivityRecord.keyDispatchingTimedOut(ActivityRecord.java:567)
  at com.android.server.WindowManagerService$InputMonitor.notifyANR(WindowManagerService.java:5390)
  at com.android.server.InputManager$Callbacks.notifyANR(InputManager.java:416)
  at dalvik.system.NativeStart.run(Native Method)
"Binder Thread #12" prio=5 tid=51 NATIVE --》最后跟到这
  | group="main" sCount=1 dsCount=0 obj=0x4075ac80 self=0x359468
  | sysTid=423 nice=-20 sched=0/0 cgrp=default handle=5168400  at org.apache.harmony.luni.platform.OSFileSystem.write(Native Method)
  at dalvik.system.BlockGuard$WrappedFileSystem.write(BlockGuard.java:171)
  at java.io.FileOutputStream.write(FileOutputStream.java:300)
  at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:164)
  at java.io.OutputStreamWriter.convert(OutputStreamWriter.java:236)
  at java.io.OutputStreamWriter.write(OutputStreamWriter.java:225)
  at java.io.PrintWriter.doWrite(PrintWriter.java:690)
  at java.io.PrintWriter.write(PrintWriter.java:665)
  at java.io.PrintWriter.write(PrintWriter.java:640)
  at java.io.PrintWriter.write(PrintWriter.java:708)
  at java.io.PrintWriter.print(PrintWriter.java:468)
  at com.android.server.PackageManagerService$ActivityIntentResolver.dumpFilter(PackageManagerService.java:4345)
  at com.android.server.PackageManagerService$ActivityIntentResolver.dumpFilter(PackageManagerService.java:4209)
  at com.android.server.IntentResolver.dumpMap(IntentResolver.java:120)
  at com.android.server.IntentResolver.dump(IntentResolver.java:149)
  at com.android.server.PackageManagerService.dump(PackageManagerService.java:7330)
  at android.os.Binder.dump(Binder.java:256)
  at android.os.Binder.onTransact(Binder.java:224)
  at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:1097)
  at com.android.server.PackageManagerService.onTransact(PackageManagerService.java:1113)
  at android.os.Binder.execTransact(Binder.java:336)
  at dalvik.system.NativeStart.run(Native Method)最后 发现 是因为binder貌似 在写(write的时候占用了很长时间),我想问下什么情况下会出现这种情况,如何去解决 谢谢