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

本文主要从以下6个方面分析介绍 Android App Crash

  1. App Crash

  2. 检测 Crash 问题

  3. Android vitals

  4. 分析 App Crash

  5. 复现 Crash 小提示

  6. 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 堆栈信息包含 以下信息

  1. Crash app 包名

  1. Crash app PID

  1. 引起Crash的异常信息(此异常时引起Crash的重要原因)

  1. 引起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详解相关推荐

  1. Android App 国际化详解

    前言 internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化),简称L10n.一般用语言_地区的形式表示一种语言,如zh_ ...

  2. android app签名详解

    本文及文中图片转自:https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247493825&idx=1&sn=e926 ...

  3. 新闻类APP模板详解(android版)

    1.概述 本文将介绍一个android版新闻类app模板,是本人整合了网上各类资源后整理出来的,希望对大家有所帮助! iOS版新闻类app模板详见: 新闻类APP模板详解(iOS版) 本模板app截图 ...

  4. 用Wex5平台打包生成App图文详解(Android)

    用Wex5平台打包生成App图文详解(Android) 第一步:到起步官网下载并解压好Wex5开发工具:http://www.wex5.com/downloads/ 第二步:在解压的目录下打开开发工具 ...

  5. [Android]多进程知识点详解

    作者:Android开发_Hua 链接:https://www.jianshu.com/p/e0f833151f66 多进程知识点汇总: 一:了解多进程 二:项目中多进程的实现 三:多进程的优缺点与使 ...

  6. JMessage Android 端开发详解

    JMessage Android 端开发详解 目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 ...

  7. Android Framework系统服务详解

    Android Framework系统服务详解 操作环境 系统:Linux (Ubuntu 12.04) 平台:高通 Android版本:5.1 PS: 符号...为省略N条代码 一.大致原理分析 A ...

  8. Android LiveData组件详解以及LiveDataBus

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99749323 本文出自[赵彦军的博客] 一.LiveData简介 LiveDat ...

  9. Android Studio 版本号详解

    Android Studio 版本号详解 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69951965 本文出自[赵彦军的博客] ...

最新文章

  1. iOS15字符串格式化缺0补0的写法
  2. 社会化分享实现插件,分享到...
  3. java中process方法用处_Java中ProcessBuilder应用实例
  4. HighCharts入门
  5. 完整的python项目实例-Python实例练手项目汇总(附源码)
  6. CSDN 原力 -- beta 测试中
  7. 国内外有哪些有前景的 AR VR公司?
  8. 链表(c语言),c语言链表(c语言链表详解)
  9. java 输出26个大小写字母
  10. [IMX6Q][Android5.1]移植笔记 --- 无法挂载system文件系统
  11. linux打开文件脚本,linux脚本文件实现的功能有哪些剧本用工具打开
  12. 佐藤ひろ美 - わたしのそらのいろ
  13. Spellman高压电源维修XRM50P50X3768电源维修PCM70N120X451
  14. linux下使用ftp命令匿名登录
  15. java三角形代码_编写Java程序测试三角形
  16. gstreamer+qgc+aarch64
  17. 2021-10-11 原理图的编译检查及PCB封装完整性检查
  18. 关键词SEO排名优化的对策与流程
  19. 用三个维度帮你对比主流的跨境电商平台
  20. 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)题解(Python版本)

热门文章

  1. Vue3 reactive 源码分析
  2. 【Proteus仿真】【51单片机】路灯控制器设计
  3. 转载:磁盘工作原理、文件系统及i节点、块存储、文件存储、对象存储、DAS、NAS、还有SAN
  4. 1013. Battle Over Cities (25) 连通图
  5. TouchScript中文---Gestures
  6. gnuplot note
  7. EMNLP2021语言模型论文合集
  8. day02-输入和输出
  9. 设计模式沉思录:一 资源池
  10. ”拒绝访问,压缩包无法解压,压缩文件zipped无法创建指定的目录“的解决方法