阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本文主要从以下6个方面分析介绍 Android 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 [<option>] ... [<filter-spec>] ...

Logcat 命令行选项

2. 启动 logcat

[adb] logcat [<option>] ... [<filter-spec>] ...

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开发干货分享

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

分享到朋友圈吧,方便您使用时快速查找!

App Crash 详解相关推荐

  1. Android App Crash详解

    Android APP Crash通常是由未捕获的Exception或signal引起app异常退出. 本文主要从以下6个方面分析介绍 Android App Crash App Crash 检测 C ...

  2. App.Config详解

    App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 配置文件的根节点是 ...

  3. 【干货】某视频app推荐详解.pdf(附下载链接)

    今天给大家带来一份干货资料<某视频app推荐详解.pdf>,本文档包含推荐目标.推荐模型.推荐架构以及产品和运营相关的问题,文档已收录到小程序省时查报告中,大家可以到省时查报告小程序中查看 ...

  4. App Widgets 详解四 RemoteViews、RemoteViewsService和RemoteViewsFactory

    导读 本篇文章将介绍"集合视图",App Widget 复杂布局的实现 App Widget 小部件系列其他文章链接 App Widgets 详解一 简单使用 App Widget ...

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

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

  6. Android13 App 预装详解

    Aosp源码上手指南目录: Android13 源码下载与编译 Android13 添加 Product Android13 自定义模块添加 Android13 预编译模块添加 Android13 A ...

  7. 智慧成铁显示无法连接服务器是怎么回事,智慧成铁是什么软件?智慧成铁职工app功能详解[图]...

    类型:商务办公 大小:40.29MB 评分:10 平台: 智慧成铁是一款不错的成都铁路职工工作软件!目前安卓版已经上线了,小伙伴们可以点击文章上方的立即下载,不少朋友对于智慧成铁app还不太了解,赶紧 ...

  8. App Manifest详解

    App Manifest详解 权限 权限是对设备上一部分代码或数据的访问限制.施加权限去保护重要代码和数据不被乱用,以伤害用户体验. 每一个权限使用唯一的标签定义.通常,标签指明了限制的行为,如下面这 ...

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

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

  10. App.Config详解及读写操作

    一.App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 配置文件的根节 ...

最新文章

  1. 配置中心Apollo的设计原理
  2. 如何在debian 中启用 fbcon
  3. 1.21 方法的可变参数(String...names)
  4. 404 错误页面_如何设计404错误页面,以使用户留在您的网站上
  5. 在数据库中, 不用max()/min()找出一个列中最大/最小值的记录
  6. 标记语言Markdown介绍以及日常使用
  7. IDEA里面添加lombok插件,编写简略风格Java代码(转)
  8. 联想拯救者Y7000 win10+ubuntu18.04双系统 nvidia1050ti驱动安装
  9. 批处理之for /r
  10. 使用PyInstaller脚本打包时提示Unable to open icon file 的一种情况
  11. OpenGL(十三)——Qt OpenGL绘制三维图形
  12. html布尔属性写法,HTML - 为什么布尔属性没有布尔值?
  13. android的短信发送全过程源代码分析
  14. linux系统python截图不显示中文_Linux系统通过python访问SQL SERVER,无法显示数据库内中文的问题...
  15. os.rename和os.renames区别
  16. uniapp安卓打包证书制作,亲测可直接使用
  17. LTE系统名词解释及上下行过程
  18. 陶瓷金属牙冠-市场现状及未来发展趋势
  19. 甲骨文数据库学习内容
  20. 盘点数学上那些毁三观的“不可能”定理

热门文章

  1. navicat for mysql 破解版 中文免费
  2. 如何学web前端-几款前端小游戏推荐
  3. android emoji unicode编码表,unicode编码
  4. 桂林理工大学 2020秋程序设计实践课程 课程设计与实习报告
  5. Telegram纸飞机电报更改为设置为中文汉化教程
  6. 推荐2本书 《浪潮之巅》 和 《数学之美》
  7. Java程序设计应用教程_Java程序设计及应用开发教程.pdf
  8. 持续改进----白狼族的故事(完结)
  9. 人力资源管理学习网站推荐
  10. 2021必看!java电子书合集