App Crash 详解

一、App Crash 概述
二、检测Crash 问题
三、Android vitals
四、分析App Crash
五、复现Crash 小提示
六、Logcat 抓取复现问题Crash的Log

一、 App Crash 概述

Android APP Crash通常是由未捕获的Exceptionsignal引起app异常退出。

如果app使用Java语言编写,那么,当Throwable抛出未处理的异常时,此时就会引起 app Crash

如果app 使用native-code编写,那么,当执行时遇到未处理的signal(例如SIGSEGV)时,app就会 Crash并退出。

当应用程序崩溃时,Android终止应用程序的进程并显示一个对话框,让用户知道应用程序已经停止。

app crash 举例

App Crash 不仅发生在前台进程,任何app组件,例如Broadcast Receivers,Content Providers,Service等在后台运行的组件,也可以引起App Crash。这些Crash很容易引起用户混淆,因为他们没有直接参与到你的app中。

二、检测Crash 问题

当你的app已经上线,过多的Crash 会给用户带来一个很糟糕的体验。Google也意思到这一点,Android vitals会帮我们意识到此问题的严重性。

三、 Android vitals

当你的应用出现过多的Crash时候,Android vitals可以通过Play Console帮助你提高app的性能。
Android vitals 认为APP 过多Crash场景如下:

  • 使用一天APP,出现一次Crash的概率在1.09%之上。
  • 使用一天APP,出现两次或多次 Crash 的概率在0.18%之上

如需获取更多信息,请查看Play Console

四、 分析App Crash

解决崩溃可能很困难。 但是,如果您能够确定崩溃的根本原因,则很可能可以找到解决方案。

有很多情况可能会导致应用程序崩溃。 一些原因是显而易见的,比如检查一个空值或空字符串,而另外一些更微妙,比如将无效参数传递给API甚至是复杂的多线程交互。

1.读取堆栈信息

解决App Crash,首先要找到在那些代码发生的。你可以通过logcat或者play Console等输出的堆栈信息进行分析查看。

Crash 堆栈信息

上述Crash 堆栈信息包含 以下信息

  • 1.Crash app 包名
  • 2.Crash app PID
  • 3.引起Crash的异常信息(此异常时引起Crash的重要原因)
  • 4.引起Crash 的代码位置,行号,哪个函数调用等等
  • 5.对于被调用的每个函数,另一行显示前面的调用站点(称为栈帧)。

通过走栈和检查代码,你可能会发现一个地方传递了一个不正确的值。 如果您的代码没有出现在堆栈跟踪中,则可能是在某处将异常操作传递给了一个无效的参数。 您可以经常通过检查堆栈跟踪的每一行,找到您使用的任何API类,并确认您传递的参数是正确的,并且从允许的地方调用该类来判断发生了什么。

五、复现Crash 小提示

您可能无法通过启动模拟器或将设备连接到计算机来重现问题。 开发环境倾向于拥有更多资源,例如带宽,内存和存储。 使用异常类型来确定稀缺资源,或者在Android版本,设备类型或应用版本之间找到关联。

1. OutOfMemoryError 内存错误

如果你有一个OutOfMemoryError,那么你可以创建一个内存容量较低的模拟器来开始,下图显示了您可以控制设备上的内存量的AVD管理器设置。

创建低 RAM模拟器复现低内存问题

2. Networking exceptions 网络异常

由于用户经常进出移动或WiFi网络覆盖范围,因此在应用程序网络中,例外情况通常不应被视为错误,而应视为意外发生的正常运行状况。

如果您需要重现网络异常(例如UnknownHostException),请尝试在应用程序尝试使用网络时打开飞行模式。

另一个选择是通过选择网络速度仿真和/或网络延迟来降低仿真器中网络的质量。 您可以使用AVD管理器上的速度和延迟设置,也可以使用-netdelay-netspeed标志启动模拟器,如以下命令行示例所示:

emulator -avd [your-avd-image] -netdelay 20000 -netspeed gsm

六、 Logcat 抓取复现问题Crash的Log

Logcat是一个命令行工具,用于转储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用Log类编写的消息。

1. 命令行语法

[adb] logcat [] ... [] ...

Logcat 命令行选项

2. 启动 logcat

[adb] logcat [] ... [] ...

3. 过滤日志输出

Log 类允许您在logcat 工具中显示的代码中创建日志条目。常用的日志记录方法包括:

  • Log.v(String, String)(详细)
  • Log.d(String, String)(调试)
  • Log.i(String, String)(信息)
  • Log.w(String, String)(警告)
  • Log.e(String, String)(错误)

4. Logcat 个人建议

抓取Log之前请先清除缓存中的Log信息,防止干扰分析问题。

  • 清除缓存Log信息命令如下:
adb logcat -c
  • 复现问题,抓取log方法如下
adb logcat > 追加到指定文件中

Logcat抓取Log个人建议

参考文献:

【腾讯文档】Android Framework 知识库
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/14866,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?