一次ANR问题的排查

问题是APP启动登录进去后,就点不了,底部任意导航栏电机的都无效,过一会儿自动报错然后自动退出。

出问题自然看Logcat哈,可是只要一启动app,logcat动不动就上千行(反正很多,具体多少行不知道),而我只是个接触Android才三个礼拜的小白,压根不知道从哪看起!虽然也做了一些打印输出,但周围都是正常的,也没见着报什么error或者execption,只能从最上面一点点开始往下翻,凭印象猜测哪一部分错误是多出来的,然后就注意到了这块:

2019-05-22 15:34:34.926 19765-19775/xx.xxxx.xx:remote I/zygote: Wrote stack traces to '/data/anr/traces.txt'
2019-05-22 15:34:34.927 1514-1598/? E/ActivityManager: ANR in xx.xxxx.xx (xx.xxxx.xx/.activity.MainActivity)
    PID: 19609
    Reason: Input dispatching timed out (xx.xxxx.xx/xx.xxxx.xx.activity.MainActivity, 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: 3.  Wait queue head age: 5660.8ms.)
    Load: 5.08 / 4.42 / 3.94
    CPU usage from 7090ms to 0ms ago (2019-05-22 15:34:23.505 to 2019-05-22 15:34:30.596):
      41% 19609/xx.xxxx.xx: 32% user + 8.6% kernel / faults: 11936 minor
      25% 763/surfaceflinger: 15% user + 10% kernel / faults: 6 minor
      10% 727/android.hardware.graphics.composer@2.1-service: 7% user + 3.5% kernel / faults: 1 minor
      6% 1514/system_server: 2.1% user + 3.9% kernel / faults: 378 minor
      3.9% 18852/mdss_fb0: 0% user + 3.9% kernel
      2.5% 277/kgsl_worker_thr: 0% user + 2.5% kernel
      2.5% 2088/com.android.systemui: 1.8% user + 0.7% kernel / faults: 432 minor
      2.1% 733/android.hardware.sensors@1.0-service: 0.8% user + 1.2% kernel / faults: 35 minor
      1.9% 14684/kworker/u16:9: 0% user + 1.9% kernel
      1.6% 8467/cnss_diag: 1.4% user + 0.2% kernel
      1.4% 17591/kworker/u16:0: 0% user + 1.4% kernel
      1.1% 440/cfinteractive: 0% user + 1.1% kernel
      1.1% 18859/irq/291-synapti: 0% user + 1.1% kernel
      0.9% 179/vsync_retire_wo: 0% user + 0.9% kernel
      0.9% 19656/xx.xxxx.xx:pushcore: 0.9% user + 0% kernel / faults: 227 minor
      0.8% 8493/com.baidu.input_mi: 0.7% user + 0.1% kernel / faults: 352 minor
      0.1% 17949/kworker/u16:10: 0% user + 0.1% kernel
      0.5% 17101/kworker/u16:2: 0% user + 0.5% kernel
      0.4% 81/smem_native_rpm: 0% user + 0.4% kernel
      0.4% 540/ueventd: 0.2% user + 0.1% kernel
      0.4% 563/logd: 0.1% user + 0.2% kernel / faults: 1 minor
      0.4% 888/adbd: 0% user + 0.4% kernel / faults: 162 minor
      0.2% 7/rcu_preempt: 0% user + 0.2% kernel
      0.2% 564/servicemanager: 0% user + 0.2% kernel
      0.2% 618/netd: 0.1% user + 0.1% kernel / faults: 349 minor
      0.2% 1077/msm_irqbalance: 0% user + 0.2% kernel
      0.2% 2275/com.android.phone: 0.1% user + 0.1% kernel / faults: 34 minor
      0.1% 1//init: 0.1% user + 0% kernel
      0.1% 10/rcuop/0: 0% user + 0.1% kernel
      0.1% 25/rcuop/2: 0% user + 0.1% kernel
      0% 79/smem_native_dsp: 0% user + 0% kernel
      0.1% 97/system: 0% user + 0.1% kernel
      0% 399/irq/501-input-c: 0% user + 0% kernel
      0.1% 534/kworker/u17:1: 0% user + 0.1% kernel
      0.1% 738/android.hardware.wifi@1.0-service: 0% user + 0.1% kernel
      0.1% 898/thermal-engine: 0% user + 0.1% kernel
      0% 1036/kworker/2:1H: 0% user + 0% kernel
      0% 2817/com.xiaomi.xmsf: 0% user + 0% kernel / faults: 38 minor
      0.1% 2845/com.miui.whetstone: 0.1% user + 0% kernel / faults: 16 minor
      0% 15801/kworker/u17:2: 0% user + 0% kernel
      0.1% 16132/com.android.defcontainer: 0.1% user + 0% kernel / faults: 36 minor
      0.1% 17454/kworker/1:2: 0% user + 0.1% kernel
      0.1% 17574/kworker/2:2: 0% user + 0.1% kernel
     +0% 19765/cn.zerone.water:remote: 0% user + 0% kernel
    15% TOTAL: 10% user + 4.3% kernel + 0% iowait + 0.4% irq + 0.2% softirq
    CPU usage from 3700ms to 4216ms later (2019-05-22 15:34:34.296 to 2019-05-22 15:34:34.812):
      32% 19609/xx.xxxx.xx: 19% user + 12% kernel / faults: 3 minor
        34% 19711/RenderThread: 21% user + 12% kernel
      30% 763/surfaceflinger: 20% user + 9.4% kernel / faults: 12 minor
        15% 763/surfaceflinger: 15% user + 0% kernel
        3.7% 942/EventThread: 0% user + 3.7% kernel
        3.7% 944/EventThread: 1.8% user + 1.8% kernel
        1.8% 1074/EventControl: 0% user + 1.8% kernel
        1.8% 1200/Binder:763_3: 1.8% user + 0% kernel
        1.8% 4538/Binder:763_5: 0% user + 1.8% kernel
      13% 727/android.hardware.graphics.composer@2.1-service: 7.5% user + 5.6% kernel
        11% 949/HwBinder:727_1: 5.6% user + 5.6% kernel
      9.3% 1514/system_server: 3.7% user + 5.6% kernel / faults: 1 minor
        5.6% 1598/ActivityManager: 1.8% user + 3.7% kernel
        1.8% 14265/Binder:1514_1F: 1.8% user + 0% kernel
      5.3% 18852/mdss_fb0: 0% user + 5.3% kernel
      5.4% 19765/xx.xxxx.xx:remote: 5.4% user + 0% kernel / faults: 

就感觉这块之前看Logcat没看见过,也不确定是不是这个,就先试试吧,然后就Google啦!看了好多帖子,才慢慢确定应该就是ANR的问题,然后就按网上看到的导出traces.txt文件:

adb pull /data/anr/traces.txt ./

这句命令当然也是从网上查的,起初还不能识别adb命令,配了下环境变量才可以。

下载后打开又是几千行,依然不知道从哪看起,就按照网上提示根据项目package搜索啦!这里package我替换成xx.xxxx.xx了。然后就看到了下面这些(当然有package的不止这一处):

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x75e7f600 self=0xf2510000
  | sysTid=17831 nice=-10 cgrp=default sched=0/0 handle=0xf283c4a8
  | state=S schedstat=( 0 0 0 ) utm=328 stm=30 core=5 HZ=100
  | stack=0xff64f000-0xff651000 stackSize=8MB
  | held mutexes=
  kernel: __switch_to+0x88/0x94
  kernel: __inet_stream_connect+0x1a0/0x2ac
  kernel: inet_stream_connect+0x3c/0x58
  kernel: SyS_connect+0x88/0xe0
  kernel: __sys_trace_return+0x0/0x4
  native: #00 pc 00049a18  /system/lib/libc.so (__connect+8)
  native: #01 pc 0000136b  /system/lib/libnetd_client.so (???)
  native: #02 pc 0001d11d  /system/lib/libjavacore.so (???)
  native: #03 pc 003b3e11  /system/framework/arm/boot-core-libart.oat (Java_libcore_io_Linux_connect__Ljava_io_FileDescriptor_2Ljava_net_InetAddress_2I+120)
  at libcore.io.Linux.connect(Native method)
  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:126)
  at libcore.io.IoBridge.connectErrno(IoBridge.java:152)
  at libcore.io.IoBridge.connect(IoBridge.java:130)
  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129)
  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:356)
  - locked <0x0a763f4b> (a java.net.SocksSocketImpl)
  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
  at java.net.Socket.connect(Socket.java:616)
  at com.android.okhttp.internal.Platform.connectSocket(Platform.java:145)
  at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:141)
  at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
  at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
  at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
  at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
  at xx.xxxx.xx.utils.ImageUtil.getBitMBitmap(ImageUtil.java:91)
  at xx.xxxx.xx.fragment.MyselfFragment$1$1.onNext(MyselfFragment.java:92)
  at xx.xxxx.xx.fragment.MyselfFragment$1$1.onNext(MyselfFragment.java:81)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
  at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
  at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:119)
  at android.os.Handler.handleCallback(Handler.java:789)
  at android.os.Handler.dispatchMessage(Handler.java:98)
  at android.os.Looper.loop(Looper.java:164)
  at android.app.ActivityThread.main(ActivityThread.java:6665)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)

这里面一大堆,最重要的就是下面这三行:

 at xx.xxxx.xx.utils.ImageUtil.getBitMBitmap(ImageUtil.java:91)
 at xx.xxxx.xx.fragment.MyselfFragment$1$1.onNext(MyselfFragment.java:92)
 at xx.xxxx.xx.fragment.MyselfFragment$1$1.onNext(MyselfFragment.java:81)

这两个文件确实是项目中新建的,然后把相关代码块注释掉,再启动,app果然就可以运行啦!

其实到现在依然不知道ANR是个什么东西,不过这次问题总算解决啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值