Android开发中ANR的定位和解决——无需Root手机

阅读: 评论:0

Android开发中ANR的定位和解决——无需Root手机

Android开发中ANR的定位和解决——无需Root手机

如果程序输出下方的log或者弹出程序无响应就表示遇到了ANR

020-07-11 23:18:19.131 1232-28781/? E/ActivityManager: ANR st (st/.MainActivity)PID: 28502Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 14.  Wait queue head age: 5581.9ms.)Load: 0.8 / 0.61 / 0.36CPU usage from 88571ms to 372ms ago (2020-07-11 23:16:46.480 to 2020-07-11 23:18:14.680) with 99% awake:15% 1232/system_server: 9.8% user + 5.2% kernel / faults: 48633 minor 2 major3.9% 797/android.hardware.sensors@1.0-service-mediatek: 1.8% user + 2% kernel2.5% 618/surfaceflinger: 1.5% user + 1% kernel / faults: 2480 minor1.9% t.mm: 1.7% user + 0.2% kernel / faults: 11390 minor 4 major0.9% 25228/com.android.packageinstaller: 0.6% user + 0.2% kernel / faults: 10014 minor1.4% 24501/adbd: 0.2% user + 1.1% kernel / faults: 291099 minor1.1% 10265/com.android.systemui: 0.8% user + 0.3% kernel / faults: 1011 minor 21 major1% s: 0.8% user + 0.2% kernel / faults: 5882 minor 19 major1% 417/logd: 0.3% user + 0.6% kernel / faults: 32 minor0.9% 155/chre_kthread: 0% user + 0.9% kernel0.9% : 0.6% user + 0.2% kernel / faults: 2800 minor 1 major0.8% 573/aphicsposer@2.1-service: 0.3% user + 0.4% kernel / faults: 1354 minor0.4% 780/installd: 0% user + 0.3% kernel / faults: 751 minor0.6% loros.persist.system: 0.3% user + 0.2% kernel / faults: 1408 minor0.5% 23765/kworker/0:3: 0% user + 0.5% kernel0.4% 10919/com.xunmeng.pinduoduo:titan: 0.3% user + 0.1% kernel / faults: 1296 minor 1 major0.4% 312/usbtemp_kthread: 0% user + 0.4% kernel0.4% 2022/com.android.phone: 0.2% user + 0.1% kernel / faults: 960 minor0.3% t.mm:push: 0.3% user + 0% kernel / faults: 999 minor0.3% 28102/kworker/1:1: 0% user + 0.3% kernel0.3% s.persistent: 0.2% user + 0% kernel / faults: 1384 minor 24 major0.2% 25284/com.oppo.market: 0.2% user + 0% kernel / faults: 1522 minor0.2% 2056/com.oppo.launcher: 0.1% user + 0% kernel / faults: 1215 minor 1 major0.2% 7/rcu_preempt: 0% user + 0.2% kernel0.2% 287/ipi_cpu_dvfs_rt: 0% user + 0.2% kernel0.1% loros.safecenter:clear_filter: 0% user + 0% kernel / faults: 619 minor 4 major0.2% 19229/kworker/u16:8: 0% user + 0.2% kernel0.2% 9560/hif_thread: 0% user + 0.2% kernel0.2% android.AlipayGphone: 0.1% user + 0% kernel / faults: 66 minor0.1% 18658/kworker/u16:0: 0% user + 0.1% kernel0.1% 18843/kworker/u16:1: 0% user + 0.1% kernel0.1% 418/servicemanager: 0% user + 0.1% kernel / faults: 1 minor0.1% 548/zygote64: 0% user + 0.1% kernel / faults: 1485 minor0.1% 771/aal: 0% user + 0.1% kernel0.1% dec: 0% user + 0% kernel / faults: 2022 minor0.1% 26807/com.android.vending: 0.1% user + 0% kernel / faults: 330 minor0.1% arme.gamecenter: 0.1% user + 0% kernel / faults: 405 minor 1 major0.1% 150/pbm: 0% user + 0.1% kernel0.1% 572/aphics.allocator@2.0-service: 0% user + 0.1% kernel / faults: 168 minor0.1% 574/android.hardware.health@2.0-service: 0% user + 0.1% kernel0.1% t.mm:tools: 0% user + 0% kernel / faults: 72 minor0.1% 19217/kworker/u17:2: 0% user + 0.1% kernel0.1% loros.digitalwellbeing: 0% user + 0% kernel / faults: 649 minor0.1% 1//init: 0% user + 0% kernel / faults: 38 minor0.1% 1185/disp_queue_P0: 0% user + 0.1% kernel0.1% 9559/tx_thread: 0% user + 0.1% kernel0.1% 26077/com.oppo.quicksearchbox: 0.1% user + 0% kernel / faults: 244 minor0.1% 23535/kworker/u17:0: 0% user + 0.1% kernel0.1% 181/disp_idlemgr: 0% user + 0.1% kernel0.1% 19228/kworker/u16:7: 0% user + 0.1% kernel0% 86/ion_mm_heap: 0% user + 0% kernel0% diatek.hardware.power@2.1-service: 0% user + 0% kernel0% 1285/mtkfusionrild: 0% user + 0% kernel0% 17704/logcat: 0% user + 0% kernel0% 22594/kworker/4:0: 0% user

日志并没有告诉我们是哪一行代码导致的耗时卡顿,那么如何查找导致ANR的元凶呢?

控制台输入下方代码

adb shell ls /data/anr/


将log日志从手机导入到桌面,

1 记得改成自己的文件地址
2文件导出过程较缓慢请耐心等待
3 一定要连接手机,如果失败就多试几次

adb bugreport /Users/liangchaojie/Desktop/




随意打开其中的一个anr日志,比如最下面的anr_2020-07-11-11-23-18-15-599

----- pid 28502 at 2020-07-11 23:18:15 -----
Cmd line: st
Build fingerprint: 'OPPO/PCPM00/OP4ACF:9/PPR1.180610.011/1590563734:user/release-keys'
ABI: 'arm64'
Build type: optimized
Zygote loaded classes=10781 post zygote classes=556
Intern table: 92927 strong; 364 weak
JNI: CheckJNI is on; globals=600 (plus 32 weak)//中间的省略...//主要看这里 main函数里面
"main" prio=5 tid=1 Sleeping| group="main" sCount=1 dsCount=0 flags=1 obj=0x7a0982c0 self=0x7ab0014c00| sysTid=28502 nice=-10 cgrp=default sched=0/0 handle=0x7b36af3548| state=S schedstat=( 968443073 36962539 567 ) utm=86 stm=10 core=4 HZ=100| stack=0x7fe2400000-0x7fe2402000 stackSize=8MB| held mutexes=at java.lang.Thread.sleep(Native method)- sleeping on <0x02d58282> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:373)- locked <0x02d58282> (a java.lang.Object)at java.lang.Thread.sleep(Thread.java:314)st.Click(MainActivity.java:22)at android.view.View.performClick(View.java:6724)at android.view.View.performClickInternal(View.java:6682)at android.view.View.access$3400(View.java:797)at android.view.View$PerformClick.run(View.java:26479)at android.os.Handler.handleCallback(Handler.java:873)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:239)at android.app.ActivityThread.main(ActivityThread.java:7227)at flect.Method.invoke(Native method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:499)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:962)//剩下的省略...


找到了耗时ANR的原因,MainAcyivity里面的onClick方法使用了Thread.sleep导致的耗时,我们验证一下结果看下代码:

本文发布于:2024-02-01 04:06:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170673160933736.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:手机   Android   ANR   Root
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23