4、binder 通信失败
07-21 06:04:35.580 <6>[32837.690321] binder: 1698:2362 transaction failed 29189/-3, size 100-0 line 304207-21 06:04:35.594 <6>[32837.704042] binder: 1765:4071 transaction failed 29189/-3, size 76-0 line 304207-21 06:04:35.899 <6>[32838.009132] binder: 1765:4067 transaction failed 29189/-3, size 224-8 line 304207-21 06:04:36.018 <6>[32838.128903] binder: 1765:2397 transaction failed 29189/-22, size 348-0 line 2916八、模拟触发ANR事件 , 获取trace文件以下的几个案例 , 都是我通过代码故意触发ANR所产生的trace文件 。
1、输入的事件在5秒内没有被响应 , 主线程被阻塞 。
输入事件5s没有响应 , 如onClick事件 。这是anr问题的主要类型,一般开发者不会犯这样的错 , 凡是耗时的操作都另开线程处理 , 如果疏忽了看看自己的代码就知道怎么处理 。
(1)模拟触发ANR:
JavafindViewById(R.id.btn_test).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SystemClock.sleep(40000);//故意响应超时导致ANR}});(2)对应的Trace文件关键日志:
DALVIK THREADS (14)://虚拟机线程被阻塞"Signal Catcher" daemon prio=5 tid=3 Runnable| group="system" sCount=0 dsCount=0 flags=0 obj=0x15980100 self=0x7322e16400| sysTid=4978 nice=0 cgrp=default sched=0/0 handle=0x731c3304f0| state=R schedstat=( 5583230 6778645 10 ) utm=0 stm=0 core=3 HZ=100| stack=0x731c235000-0x731c237000 stackSize=1009KB| held mutexes= "mutator lock"(shared held)"main" prio=5 tid=1 Sleeping//主线程被阻塞| group="main" sCount=1 dsCount=0 flags=1 obj=0x73e64b08 self=0x7322e14c00| sysTid=4972 nice=-10 cgrp=default sched=0/0 handle=0x73a88cc548| state=S schedstat=( 618097798 184039398 700 ) utm=56 stm=5 core=3 HZ=100| stack=0x7fd05f2000-0x7fd05f4000 stackSize=8MB| held mutexes=at java.lang.Thread.sleep(Native method)- sleeping on <0x0d9c45cc> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:373)- locked <0x0d9c45cc> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:314)at android.os.SystemClock.sleep(SystemClock.java:127) //代码被阻塞的关键位置at com.example.anrtest.MainActivity$1.onClick(MainActivity.java:57)//按钮的点击事件at android.view.View.performClick(View.java:6597)at android.view.View.performClickInternal(View.java:6574)at android.view.View.access$3100(View.java:778)at android.view.View$PerformClick.run(View.java:25885)at android.os.Handler.handleCallback(Handler.java:873)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6718)at java.lang.reflect.Method.invoke(Native method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)2、广播接收者的onReceive方法在10秒内没有执行完毕 。
BroadcastReceiver是在程序主线程运行,而且默认情况下BroadcastReceiver的运行时间为10s , 所以不能有耗时操作 , 如果耗时超过10s就会导致anr , 从traces文件log就可以看出onReceive不能进行耗时任务 。
(1)模拟触发ANR:
JavaIntentFilter intentFilter = new IntentFilter();intentFilter.addAction("com.anr.test");registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {SystemClock.sleep(40000);//故意响应超时导致ANR}}, intentFilter);(2)对应的Trace文件关键日志:
DALVIK THREADS (14)://虚拟机线程被阻塞"Signal Catcher" daemon prio=5 tid=3 Runnable| group="system" sCount=0 dsCount=0 flags=0 obj=0x13100088 self=0x7322e16400| sysTid=6639 nice=0 cgrp=default sched=0/0 handle=0x731c3304f0| state=R schedstat=( 6547603 5577708 11 ) utm=0 stm=0 core=0 HZ=100| stack=0x731c235000-0x731c237000 stackSize=1009KB| held mutexes= "mutator lock"(shared held)"main" prio=5 tid=1 Sleeping//主线程被阻塞| group="main" sCount=1 dsCount=0 flags=1 obj=0x73e64b08 self=0x7322e14c00| sysTid=6633 nice=-10 cgrp=default sched=0/0 handle=0x73a88cc548| state=S schedstat=( 605006551 138044643 533 ) utm=56 stm=3 core=2 HZ=100| stack=0x7fd05f2000-0x7fd05f4000 stackSize=8MB| held mutexes=at java.lang.Thread.sleep(Native method)- sleeping on <0x08c05759> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:373)- locked <0x08c05759> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:314)at android.os.SystemClock.sleep(SystemClock.java:127) //代码被阻塞的关键位置at com.example.anrtest.MainActivity$3.onReceive(MainActivity.java:80)//广播接收者的onReceive方法at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(lambda:-1)at android.os.Handler.handleCallback(Handler.java:873)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6718)at java.lang.reflect.Method.invoke(Native method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
推荐阅读
- OpenCV在Android手机实现在图像上添加文本
- Android Studio 新版本 Logcat 的使用
- 羌族服饰特点简要介绍 羌族服饰中心最多运用的花纹是
- 广东佛山瓷砖十大名牌 新中源陶瓷
- 晶女郎邱意浓?《大内密探灵灵狗》中袁若男和希望的扮演者是谁?
- 维纳斯是古希腊神话中的什么? 维纳斯是希腊神话中的什么神
- 中国哪里盛产铁矿 铁矿哪里多
- 男生中长发发型2021年最新款 男生长发发型
- 朵拉历险记全集中文版 爱冒险的朵拉
- 多道网赚论坛~~哪个网赚论坛流量大,中赚,大地,福缘?
