咱调情 4星
共回答了446个问题采纳率:93.9% 评论
其实就是程序由于某些原因出错了,可能是代码 BUG 也可能是系统和环境因素导致的。
例如你的某个 App 需要通过服务器获取数据,但是你的手机网络有问题导致一直获取不到,造成网络连接超时。如果代码中未对「超时」这个可能发生的情况进行处理的话,那么「出现网络请求超时」这个现象就属于未捕获的异常。异常就是指的超时这个行为,未捕获指的未对这个行为进行处理。
而 Android 中程序一旦出错,就会统一的弹出一个「应用已停止运行」,然后结束或者重启应用程序。
单看这个弹窗是无意义的,如果你想看到实际细节,你需要深入输出的日志找到具体原因。这时候就需要用 logcat。
logcat 查看日志,需要先让设备成功进行 adb 连接以后。然后:
当然,由于已经确定要看的是已经崩溃的应用,那么我们过滤日志 Tag 类型为 Error 即可:
再由于我们通常是知道崩溃是那个应用,所以我们可以继续指定应用过滤。例如我自己开发的一个 App 包名是
io.bluerain.tweaks
,假设我不是开发者,我只能通过包名过滤。
网上有一种方法是利用 Android 内置的 ps 命令获取进程,然后用 grep 过滤和 cut 截取到 pid,再由 pid 过滤日志。这样间接的实现包名过滤的手段:
先运行应用,然后输入上面的命令。再重现一次应用崩溃,就可以看到很少量的日志输出,其中包含崩溃详情,例如我这边是出现的异常是:
从 *Exception 的冒号后面看异常消息,发现是无权访问 SD 卡。所以它就是导致该应用已停止运行的原因。
另外,这个跟 ANR 无关。ANR 是 Application not Responding 的简写,也就是「应用未响应」,它通常跟异常、BUG 等都无关,二者完全不是一回事儿。
分享
22小时前
猜你喜欢的问题
5个月前1个回答
5个月前1个回答
5个月前1个回答
5个月前2个回答
5个月前1个回答
5个月前2个回答
热门问题推荐
2个月前1个回答
2个月前1个回答
3个月前2个回答
4个月前2个回答
3个月前3个回答
4个月前2个回答
1个月前1个回答
3个月前2个回答
1个月前1个回答