阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本文主要从以下个方面分析介绍
通过本篇文章,您将获取到以下内容
一、App Crash 概述
二、检测Crash 问题
三、Android vitals
四、分析App Crash
五、复现Crash 小提示
六、Logcat 抓取复现问题Crash的Log
一、 App Crash 概述
通常是由未捕获的或引起异常退出。
如果使用语言编写,那么,当抛出未处理的异常时,此时就会引起 。
如果app 使用编写,那么,当执行时遇到未处理的(例如)时,就会 并退出。
当应用程序崩溃时,终止应用程序的进程并显示一个对话框,让用户知道应用程序已经停止。
app crash 举例
不仅发生在前台进程,任何组件,例如,,等在后台运行的组件,也可以引起。这些很容易引起用户混淆,因为他们没有直接参与到你的中。
二、检测Crash 问题
当你的已经上线,过多的 会给用户带来一个很糟糕的体验。也意思到这一点,会帮我们意识到此问题的严重性。
三、 Android vitals
当你的应用出现过多的时候,可以通过帮助你提高的性能。
认为 过多场景如下:
使用一天,出现一次Crash的概率在之上。
使用一天,出现两次或多次 Crash 的概率在之上
如需获取更多信息,请查看
四、 分析App Crash
解决崩溃可能很困难。 但是,如果您能够确定崩溃的根本原因,则很可能可以找到解决方案。
有很多情况可能会导致应用程序崩溃。 一些原因是显而易见的,比如检查一个空值或空字符串,而另外一些更微妙,比如将无效参数传递给API甚至是复杂的多线程交互。
1.读取堆栈信息
解决App Crash,首先要找到在那些代码发生的。你可以通过或者等输出的堆栈信息进行分析查看。
Crash 堆栈信息
上述Crash 堆栈信息包含 以下信息
1.Crash app 包名
2.Crash app PID
3.引起Crash的异常信息(此异常时引起Crash的重要原因)
4.引起Crash 的代码位置,行号,哪个函数调用等等
5.对于被调用的每个函数,另一行显示前面的调用站点(称为栈帧)。
通过走栈和检查代码,你可能会发现一个地方传递了一个不正确的值。 如果您的代码没有出现在堆栈跟踪中,则可能是在某处将异常操作传递给了一个无效的参数。 您可以经常通过检查堆栈跟踪的每一行,找到您使用的任何API类,并确认您传递的参数是正确的,并且从允许的地方调用该类来判断发生了什么。
五、复现Crash 小提示
您可能无法通过启动模拟器或将设备连接到计算机来重现问题。 开发环境倾向于拥有更多资源,例如带宽,内存和存储。 使用异常类型来确定稀缺资源,或者在Android版本,设备类型或应用版本之间找到关联。
1. OutOfMemoryError 内存错误
如果你有一个,那么你可以创建一个内存容量较低的模拟器来开始,下图显示了您可以控制设备上的内存量的AVD管理器设置。
创建低 RAM模拟器复现低内存问题
2. Networking exceptions 网络异常
由于用户经常进出移动或WiFi网络覆盖范围,因此在应用程序网络中,例外情况通常不应被视为错误,而应视为意外发生的正常运行状况。
如果您需要重现网络异常(例如),请尝试在应用程序尝试使用网络时打开飞行模式。
另一个选择是通过选择网络速度仿真和/或网络延迟来降低仿真器中网络的质量。 您可以使用AVD管理器上的速度和延迟设置,也可以使用和标志启动模拟器,如以下命令行示例所示:
六、 Logcat 抓取复现问题Crash的Log
是一个命令行工具,用于转储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用类编写的消息。
1. 命令行语法
Logcat 命令行选项
2. 启动 logcat
3. 过滤日志输出
类允许您在 工具中显示的代码中创建日志条目。常用的日志记录方法包括:
Log.v(String, String)(详细)
Log.d(String, String)(调试)
Log.i(String, String)(信息)
Log.w(String, String)(警告)
Log.e(String, String)(错误)
4. Logcat 个人建议
抓取之前请先清除缓存中的信息,防止干扰分析问题。
清除缓存Log信息命令如下:
复现问题,抓取log方法如下
Logcat抓取Log个人建议
友情推荐
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
分享到朋友圈吧,方便您使用时快速查找!
领取专属 10元无门槛券
私享最新 技术干货