Android App Crash详解
Android APP Crash
通常是由未捕获的Exception
或signal
引起app
异常退出。
本文主要从以下6
个方面分析介绍 Android App Crash
App Crash
检测 Crash 问题
Android vitals
分析 App Crash
复现 Crash 小提示
Logcat 抓取复现问题 Crash 的 Log
欢迎关注微信公众号:程序员Android
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
1. App Crash
如果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
中。
2. 检测Crash 问题
当你的app
已经上线,过多的Crash
会给用户带来一个很糟糕的体验。Google
也意思到这一点,Android vitals
会帮我们意识到此问题的严重性。
3. Android vitals
当你的应用出现过多的Crash
时候,Android vitals
可以通过Play Console
帮助你提高app
的性能。Android vitals
认为APP
过多Crash
场景如下:
使用一天
APP
,出现一次Crash的概率在1.09%
之上。使用一天
APP
,出现两次或多次 Crash 的概率在0.18%
之上
如需获取更多信息,请查看Play Console
4. 分析App Crash
解决崩溃可能很困难。 但是,如果您能够确定崩溃的根本原因,则很可能可以找到解决方案。
有很多情况可能会导致应用程序崩溃。 一些原因是显而易见的,比如检查一个空值或空字符串,而另外一些更微妙,比如将无效参数传递给API甚至是复杂的多线程交互。
读取堆栈信息
解决App Crash,首先要找到在那些代码发生的。你可以通过logcat
或者play Console
等输出的堆栈信息进行分析查看。
Crash 堆栈信息
上述Crash 堆栈信息包含 以下信息
Crash app 包名
Crash app PID
引起Crash的异常信息(此异常时引起Crash的重要原因)
引起Crash 的代码位置,行号,哪个函数调用等等
5 . 对于被调用的每个函数,另一行显示前面的调用站点(称为栈帧)。
通过走栈和检查代码,你可能会发现一个地方传递了一个不正确的值。 如果您的代码没有出现在堆栈跟踪中,则可能是在某处将异常操作传递给了一个无效的参数。 您可以经常通过检查堆栈跟踪的每一行,找到您使用的任何API类,并确认您传递的参数是正确的,并且从允许的地方调用该类来判断发生了什么。
5. 复现Crash 小提示
您可能无法通过启动模拟器或将设备连接到计算机来重现问题。 开发环境倾向于拥有更多资源,例如带宽,内存和存储。 使用异常类型来确定稀缺资源,或者在Android版本,设备类型或应用版本之间找到关联。
OutOfMemoryError 内存错误
如果你有一个OutOfMemoryError
,那么你可以创建一个内存容量较低的模拟器来开始,下图显示了您可以控制设备上的内存量的AVD管理器设置。
创建低 RAM模拟器复现低内存问题
Networking exceptions 网络异常
由于用户经常进出移动或WiFi网络覆盖范围,因此在应用程序网络中,例外情况通常不应被视为错误,而应视为意外发生的正常运行状况。
如果您需要重现网络异常(例如UnknownHostException
),请尝试在应用程序尝试使用网络时打开飞行模式。
另一个选择是通过选择网络速度仿真和/或网络延迟来降低仿真器中网络的质量。 您可以使用AVD管理器上的速度和延迟设置,也可以使用-netdelay
和-netspeed
标志启动模拟器,如以下命令行示例所示:
emulator -avd [your-avd-image] -netdelay 20000 -netspeed gsm
6. Logcat 抓取复现问题Crash的Log
Logcat
是一个命令行工具,用于转储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用Log
类编写的消息。
命令行语法
[adb] logcat [<option>] ... [<filter-spec>] ...
Logcat 命令行选项
启动 logcat
[adb] logcat [<option>] ... [<filter-spec>] ...
过滤日志输出
Log
类允许您在logcat
工具中显示的代码中创建日志条目。常用的日志记录方法包括:
Log.v(String, String)(详细)
Log.d(String, String)(调试)
Log.i(String, String)(信息)
Log.w(String, String)(警告)
Log.e(String, String)(错误)
Logcat 个人建议
抓取Log
之前请先清除缓存中的Log
信息,防止干扰分析问题。
清除缓存Log信息命令如下:
adb logcat -c
复现问题,抓取log方法如下
adb logcat > 追加到指定文件中
Logcat抓取Log个人建议
感谢您的阅读,谢谢!
欢迎关注微信公众号:程序员Android
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
点击阅读原文,获取更多福利
Android App Crash详解相关推荐
- Android App 国际化详解
前言 internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化),简称L10n.一般用语言_地区的形式表示一种语言,如zh_ ...
- android app签名详解
本文及文中图片转自:https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247493825&idx=1&sn=e926 ...
- 新闻类APP模板详解(android版)
1.概述 本文将介绍一个android版新闻类app模板,是本人整合了网上各类资源后整理出来的,希望对大家有所帮助! iOS版新闻类app模板详见: 新闻类APP模板详解(iOS版) 本模板app截图 ...
- 用Wex5平台打包生成App图文详解(Android)
用Wex5平台打包生成App图文详解(Android) 第一步:到起步官网下载并解压好Wex5开发工具:http://www.wex5.com/downloads/ 第二步:在解压的目录下打开开发工具 ...
- [Android]多进程知识点详解
作者:Android开发_Hua 链接:https://www.jianshu.com/p/e0f833151f66 多进程知识点汇总: 一:了解多进程 二:项目中多进程的实现 三:多进程的优缺点与使 ...
- JMessage Android 端开发详解
JMessage Android 端开发详解 目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 ...
- Android Framework系统服务详解
Android Framework系统服务详解 操作环境 系统:Linux (Ubuntu 12.04) 平台:高通 Android版本:5.1 PS: 符号...为省略N条代码 一.大致原理分析 A ...
- Android LiveData组件详解以及LiveDataBus
转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99749323 本文出自[赵彦军的博客] 一.LiveData简介 LiveDat ...
- Android Studio 版本号详解
Android Studio 版本号详解 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69951965 本文出自[赵彦军的博客] ...
最新文章
- iOS15字符串格式化缺0补0的写法
- 社会化分享实现插件,分享到...
- java中process方法用处_Java中ProcessBuilder应用实例
- HighCharts入门
- 完整的python项目实例-Python实例练手项目汇总(附源码)
- CSDN 原力 -- beta 测试中
- 国内外有哪些有前景的 AR VR公司?
- 链表(c语言),c语言链表(c语言链表详解)
- java 输出26个大小写字母
- [IMX6Q][Android5.1]移植笔记 --- 无法挂载system文件系统
- linux打开文件脚本,linux脚本文件实现的功能有哪些剧本用工具打开
- 佐藤ひろ美 - わたしのそらのいろ
- Spellman高压电源维修XRM50P50X3768电源维修PCM70N120X451
- linux下使用ftp命令匿名登录
- java三角形代码_编写Java程序测试三角形
- gstreamer+qgc+aarch64
- 2021-10-11 原理图的编译检查及PCB封装完整性检查
- 关键词SEO排名优化的对策与流程
- 用三个维度帮你对比主流的跨境电商平台
- 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)题解(Python版本)