三九宝宝网宝宝百科宝宝知识

请教android service ANR问题

02月23日 编辑 39baobao.com

[Android是什么意思]Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多...+阅读

刚拿到anr的trace,还是无头绪,都是调用栈的dump,仔细看看,发现一个很好的信息隐藏在这个栈帧信息中:如下一个栈帧:----- pid 861 at 2012-02-11 14:57:50 ----- Cmd line: system_server DALVIK THREADS:(mutexes: tll=0 tsl=0 tscl=0 ghl=0)"main" prio=5 tid=1 MONITOR | group="main" sCount=1 dsCount=0 obj=0x2ba9c460 self=0x8e820 | sysTid=861 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=716342112 | schedstat=( 0 0 0 ) utm=464 stm=65 core=0 at com.android.server.am.ActivityManagerService.isUserAMonkey(ActivityManagerService.java:~6546)- waiting to lock(a com.android.server.am.ActivityManagerService) held by tid=59 (Binder Thread #6) at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:1273) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1545) at android.os.Binder.execTransact(Binder.java:338) at com.android.server.SystemServer.init1(Native Method) at com.android.server.SystemServer.main(SystemServer.java:808) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) 这说明什么?看上面的红色部分,说明这个主线程在等待锁一个object 0x2c1141c8 (通常就是synchronized操作,这里就是com.android.server.am.ActivityManagerService类型的一个object),但被tid=59占住了, 再看看 tid=59的栈帧:"Binder Thread #6" prio=5 tid=59 MONITOR | group="main" sCount=1 dsCount=0 obj=0x2c3bd838 self=0x34c5d8 | sysTid=1120 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=3460688 | schedstat=( 0 0 0 ) utm=168 stm=48 core=0 at com.android.server.am.BatteryStatsService.noteStopWakelock(BatteryStatsService.java:~114)- waiting to lock(a com.android.internal.os.BatteryStatsImpl) held by tid=13 (ProcessStats) at com.android.server.PowerManagerService.noteStopWakeLocked(PowerManagerService.java:798) at com.android.server.PowerManagerService.releaseWakeLockLocked(PowerManagerService.java:1015) at com.android.server.PowerManagerService.releaseWakeLock(PowerManagerService.java:967) at android.os.PowerManager$WakeLock.release(PowerManager.java:319) at android.os.PowerManager$WakeLock.release(PowerManager.java:300) at com.android.server.am.ActivityStack.activityIdleInternal(ActivityStack.java:3254) at com.android.server.am.ActivityManagerService.activityIdle(ActivityManagerService.java:3953) at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:362) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1545) at android.os.Binder.execTransact(Binder.java:338) at dalvik.system.NativeStart.run(Native Method) tid为何没有释放锁object 0x2c1141c8呢?因为它在等到锁 object 0x2c117d50(一个com.android.internal.os.BatteryStatsImpl类型的对象)!如果大家有较丰富的捉虫经验的话,看到这, 想必都清楚了,持锁时又请求锁,极大的可能就是死锁了!再看请求的锁被tid=13持有的情况吧:"ProcessStats" prio=5 tid=13 MONITOR | group="main" sCount=1 dsCount=0 obj=0x2c146f58 self=0x2954f0 | sysTid=877 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=2709096 | schedstat=( 0 0 0 ) utm=6 stm=4 core=0 at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:~12430)- waiting to lock(a com.android.server.am.ActivityManagerService) held by tid=59 (Binder Thread #6) at android.app.ContextImpl.sendBroadcast(ContextImpl.java:909) at com.android.server.DropBoxManagerService.add(DropBoxManagerService.java:236) at android.os.DropBoxManager.addText(DropBoxManager.java:272) at com.android.server.am.ActivityManagerService$11.run(ActivityManagerService.java:7630) at com.android.server.am.ActivityManagerService.addErrorToDropBox(ActivityManagerService.java:7635) at com.android.server.am.ActivityManagerService.handleApplicationWtf(ActivityManagerService.java:7448) at com.android.internal.os.RuntimeInit.wtf(RuntimeInit.java:345) at android.util.Log$1.onTerribleFailure(Log.java:103) at android.util.Log.wtf(Log.java:278) at com.android.internal.os.BatteryStatsImpl.getNetworkStatsDetailGroupedByUid(BatteryStatsImpl.java:5738) at com.android.internal.os.BatteryStatsImpl.access$100(BatteryStatsImpl.java:76) at com.android.internal.os....

以下为关联文档:

怎么安装android sdk方法/步骤 1 下载最新的Android SDK 文件,到官网选择自己想要的版本下载。 2 解压Android SDK文件,里面有两个应用程序: “SDK Manager.exe”(负责下载或更新SDK包) 和 "AVD Manag...

Android系统程序怎么精简你的Android系统被安装了很多没用却删不掉的系统程序?或者说,为什么检测一切正常的手机耗电总是比其他人的快?如果你想好好净化精简你的手机Android系统,让你的手机更省电,运行更...

android5 0怎么精简Android 5.0操作系统的代号将是“酸橙派(Key Lime Pie)”,传言将于2012年年底推出。 Android 5.0十大特点 1、完整的Chrome浏览器 Android 5.0的Web浏览器的变化将非常受欢迎,支...

请教android怎么让控件背景透明Button或者ImageButton的背景设为透明或者半透明 半透明<Button android:background="#e0000000" ... /> 透明<Button android:background="#00000000" ... /> 颜色和不透明度 (a...

动态添加Android安卓控件动态添加Android(安卓)控件步骤: 1、addView 添加控件到布局容器 2、removeView 在布局容器中删掉已有的控件 3、使用 public class MainActivity extends Activity { Override...

android studio怎么使用调试启动Android Studio打开一个demo程序, 点击工具栏的调试按钮 或者 点击菜单“Run”-“Debug...” 在”Choose Device“对话框中,选择设备, 设置好断点,然后让应用程序断下来。(注...

android系统如何刷机?我也是安卓的,虽然手机不一样,关于安卓系统我觉得不必非得跟上更新 因为各种安卓系统是由原生安卓改版来的,每个论坛也有他的改版系统,当然了,原始的系统应该是英文的,无论新的系...

Android Auto怎么用Android Auto自动运行于你的手机当中,只要系统版本在5.0以上。这也就是说,你的手机会负责所有的运行和处理任务,并将Android Auto的界面传输到汽车屏幕上。 1.手机上的Android...

android studio怎么用今天绿茶小编为大家带来的是android studio下载安装及使用教程,刚接触Android Studio可能会感觉比较陌生,希望接下来这篇文章能够帮助到大家更快的上手Android Studio。 第一...

推荐阅读
图文推荐