问题是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是个什么东西,不过这次问题总算解决啦!