Android Crash和ANR监控
文章目录
- 一、Crash
- 1.1 概念
- 1.2 类型
- 二、ANR
- 2.1 概念
- 2.2 类型
- 2.2.1 KeyDispatchTimeout(常见)
- 2.2.2 BroadcastTimeout
- 2.2.3 ServiceTimeout
- 2.2.4 ContentProviderTimeout
- 三、测试中如何关注
- 3.1 Crash测试关注方法
- 3.2 ANR测试关注方法
- 四、如何记录与处理
- 4.1 记录保存问题现场
- 4.2 记录问题出现条件或步骤
- 4.3 协助开发及相关人进行问题定位分析
- 4.4 风险告知,避免问题扩大化
一、Crash
1.1 概念
表现:Crash也就是程序崩溃或闪退
影响:
- 程序无法继续运行,数据丢失
- 糟糕的用户体验
1.2 类型
类型:闪退分为Java层的闪退和native层的闪退。
Application Crash由于java层线程因未捕获异常而终止,由系统的void uncaughtException(Thread t,Throwable e)
方法进行捕获和处理,通常会给出界面弹窗提示“***已停止运行。”。
Application Crash常见原因如下:(都是常见的java异常)
- NullPointerException:空指针异常。
- SQLException:操作数据库异常类。
- ClassCastException:数据类型转换异常。
- NumberFormatException:字符串转换为数字类型时抛出的异常。
- ClassNotFoundException:这个异常的解释是"指定的类不存在"。
- ArithmeticException:这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。
- ArrayIndexOutOfBoundsException:数组越界异常
- IllegalArgumentException:这个异常的解释是"方法的参数错误"
- IllegalAccessException:这个异常的解释是"没有类访问权限"
- ArrayStoreException:错误对象存储到数组
二、ANR
2.1 概念
表现:ANR即应用程序无响应。
UI线程被阻塞太长时间,就会出现ANR,然后弹框,结束进程、继续等待。
影响:
- 等待时间过长,无提示,无法给出等待的反馈,用户流失
- 无法继续完成操作,数据丢失
2.2 类型
2.2.1 KeyDispatchTimeout(常见)
input事件在5S内没有处理完成发生了ANR。
logcat日志关键字:Input event dispatching timed out
下图为典型的input anr触发流程:
2.2.2 BroadcastTimeout
前台Broadcast:onReceiver在10S内没有处理完成发生ANR。
后台Broadcast:onReceiver在60s内没有处理完成发生ANR。
logcat日志关键字:Timeout of broadcast BroadcastRecord
2.2.3 ServiceTimeout
前台Service:onCreate,onStart,onBind等生命周期在20s内没有处理完成发生ANR。
后台Service:onCreate,onStart,onBind等生命周期在200s内没有处理完成发生ANR
logcat日志关键字:Timeout executing service
下图为典型的 service/broadcast anr触发流程:
2.2.4 ContentProviderTimeout
ContentProvider 在10S内没有处理完成发生ANR。
logcat日志关键字:timeout publishing content providers
下图为典型的 contentProvider anr触发流程:
三、测试中如何关注
3.1 Crash测试关注方法
- 关注界面中的所有按钮、控件的操作有效性,点击是否能产生对应的目标事件
- 通过自动化对应用的部分运算操作进行长时间负载测试,可有效暴露此问题
- 通过重复的多次操作可有效暴露此问题
- 通过对输入框进行异常输入,例如日期输入框,文本输入框等
如何解决:
- log文件夹下全局搜am_crash,此时会把log文件下下所有的包含am_crash的行显示出来
- crash问题很好看,基本上就代码写的有问题,针对出现的问题修改一下就好
3.2 ANR测试关注方法
- 对部分上传文件较大的页面、保存文件信息较多的动作,比如电话本信息、带有图片的记事本保存等操作。
- 对某一时间的网络进行极限使用,在被测应用的一个场景无法使用网络的情况下关注。
- 重复多次的操作可能导致ANR事件,可使用Monkey工具进行测试。
- 多任务、多线程应用内存占用极限时
如何解决:
- log文件夹下全局搜am_anr,此时会把log文件下下所有的包含am_anr的行显示出来(也可以搜activitymanager: ANR)
- 一般同一个时间点的anr log会在不同的文件中出现两次,一次是logxxx.txt中,一次是在crash_xxxxxx文件夹中的aplog_ANR_时间文件中
- 进入到crash_xxxxxx文件夹下,找到一个data_app_anr@xxx.txt文件
- 在data_app_anr@xxx.txt文件中找到
"main" prio=5 tid=1 Nativ
这一行,往下看会有一些异常log,这些log描述的就是问题原因 - ANR如果是由于主线程阻塞,在data_app_anr@xxx.txt中的
"main" prio=5 tid=1
中会显示 block
四、如何记录与处理
4.1 记录保存问题现场
- 系统各类日志信息收集,如果可以建议开发提供一个一键式日志收集功能或自己编写一个一键式日志收集脚本
- 保存进程crash的coredump信息,便于后续开发进一步定位分析
4.2 记录问题出现条件或步骤
- 出现问题后,第一时间记录本次问题发生前各类预置条件:app或系统版本信息,测试工具信息、硬件环境信息、被测试对象版本信息等等
- 自动化或手动测试操作步骤信息记录:如果是自动化测试,要保存好自动化用例步骤;如果是手动测试,养成良好的记录习惯,记录好测试步骤
- 很多问题是概率出现的,问题定位解决过程中,很有可能需要你复现问题。 养成良好习惯,可以降低问题复现成本
4.3 协助开发及相关人进行问题定位分析
- 平时测试过程中,与开发及周边相关人员,建立好良好沟通矩阵
- 问题出现后,首先详细描述问题现象,拉通开发人员协助收集问题信息及开展问题定位
4.4 风险告知,避免问题扩大化
- 养成良好的风险意识,结合版本发布计划,与项目经理、测试经理等相关人明确问题影响及风险
- 譬如:如果版本马上要发布了,你测试过程中遇到致命的crash等问题,需要及时知会项目利益相关人,项目经理/测试经理/开发代表等角色,可能因为你发现的这个问题评估项目发布节奏等
参考文档:
https://juejin.cn/post/7170975699593855012
https://blog.csdn.net/sinat_26192119/article/details/115483842
相关文章:

Android Crash和ANR监控
文章目录一、Crash1.1 概念1.2 类型二、ANR2.1 概念2.2 类型2.2.1 KeyDispatchTimeout(常见)2.2.2 BroadcastTimeout2.2.3 ServiceTimeout2.2.4 ContentProviderTimeout三、测试中如何关注3.1 Crash测试关注方法3.2 ANR测试关注方法四、如何记录与处理4.…...
【02 赖世雄英语语法:复句的语法】
复句的语法复句:把单句 连在一起(标点符号,连词,关系词)1. 连接符号1.1 破折号 — :补充说明,同位语1.2 冒号 : (同位语)1.3 分号 ; ( , 连词)&am…...
北斗导航 | 多参考一致性监测算法(MRCC)(附伪码)—— B值计算
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== MRCC 用于接收机失效检查与排除。在进行 MRCC 之前,先判断 4 台接收机…...

数字孪生与 UWB 人员定位:双剑合璧的智能物联新时代
人员定位是指利用各种定位技术对人员在特定场所的位置进行准确定位的技术。人员定位技术主要应用于需要实时监控、管理和保障人员安全的场所,如大型厂区、仓库、医院、学校、商场等。人员定位技术的应用范围非常广泛,例如:-在工厂生产线上&am…...

奇点云DataSimba发版全解析:“企业级”版本升级,提供最佳组合
近日,奇点云发布数据云产品商业化版本的全新升级:DataSimba(数据云平台)提供极速版、专业版、旗舰版、红旗版,可靠性、可用性、可服务性再进阶,四大版本满足不同企业选择。 「乐高式DIY」or「最佳组合」&am…...

2-7 SpringCloud快速开发入门: Eureka 注册中心高可用集群搭建
接上一章节Eureka 服务注册中心发现与消费服务,这里讲讲Eureka 注册中心高可用集群搭建 Eureka 注册中心高可用集群搭建 Eureka 注册中心高可用集群就是各个注册中心相互注册 Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,…...
STL中的函数对象
STL-函数对象 函数对象概念 重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质 函数对象(仿函数)是一个类,不是一个函数—修改算法策略—采用虚拟对象调用 函数对象的使用理…...
linux下libevent的编译安装
1,官网下载最新的,https://libevent.org/2,将文件解压,虚拟机可以右键解压,也可以用命令解压,tar zxvf libevent.tar.gz,进行解压缩。这里压缩包的名称只是举例,实际它还会带上版本号…...

深度学习部署笔记(十): CUDA RunTime API-2.2流的学习
1. 流的定义 流(Stream)是一个基于上下文(Context)的任务管道抽象,是一组由GPU依次执行的CUDA操作序列,其中每个操作可能会使用或产生数据。在一个上下文中可以创建多个流,每个流都拥有自己的任…...

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解I2C的使用
🍇 博主主页: 【Systemcall小酒屋】🍇 博主追寻:热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是林群院士说过的一句话,另外“成就是最好的老师”,技术…...

工作记录:举步维艰的在线 word 之旅 - tinymce
项目中需要实现 “在线编辑 word 模板” 的功能,我打算使用富文本组件 tinymce ,因为业务需求比较特殊,研究一下 tinymce 是否能实现。 如何在 vue 项目中引用 tinymce,可以看另一篇文章 《在 vue 项目中使用 tinymce》 &#x…...
动态规划编译距离
583. 两个字符串的删除操作方法:dp状态表示:以i-1和j-1为结尾的字符串world1和world2,抵达相同的字符串所需的最少操作数属性:最小值状态计算:world1[i-1]和world2[j-1]相同dp[i][j] dp[i-1][j-1];world1[i-1]和world…...
Netty 教程 – 解码器详解
TCP以流的方式进行数据传输,上层的应用为了对消息进行区分,往往采用如下方式 固定消息长度,累计读取到长度和定长LEN的报文后,就认为读取到了个完整的消息,然后将计数器位置重置在读取下一个报文内容将回车换行符作为…...

Allegro如何自动添加测试点操作指导
Allegro如何自动添加测试点操作指导 在做PCB设计的时候,在一些应用场合下需要给PCB上的网络添加测试点,如下图 测试点除了可以手动逐个添加之外,Allegro还支持自动添加测试点,具体操作如下 点击Manufacture点击Testprep...

【CSS】CSS 背景设置 ③ ( 背景位置-长度值设置 | 背景位置-长度值方位值同时设置 )
文章目录一、背景位置-长度值设置二、背景位置-长度值方位值同时设置三、完整代码示例一、背景位置-长度值设置 长度值设置 效果展示 : 设置背景位置为具体值 10px 50px : 粉色区域是盒子的区域 , 图片背景位于盒子位置 x 轴方向 10 像素 , y 轴方向 50 像素 ; 在水平方向上 ,…...
AbTest —— 不同场景下的应用模式
文章目录不同人群眼中的 AbTestAbTest 不同的功能倚重用户关联性弱,经典场景为 Feed - 部门组织形式大多非垂直业务用户关联性强,经典场景为 垂类/工具类APP;部门组织形式大多为垂直业务康为定律-组织决定产品形态不同应用模式下服务构建开机…...

fast-api 一款快速将spring的bean发布成接口并生产对应swagger文档调试的轻量级工具
fast-api简介背景开发痛点:分析需求实战fast-api快速上手1. 引入依赖2. FastApiMapping标记service对象3. swagger2/knife4j 在线测试进阶使用开启调试模式支持指定类或包目录发布如何关闭fast-api自定义fast-api的前缀写在最后简介 fast-api 一款快速将spring的bean(service)发…...
以公益之名 让人类发现数学之美
目录 1.品牌理念高举高打 2.创新赛制 赋能品牌 3.全球化的品牌传播 9月26日,2022阿里巴巴全球数学竞赛获奖名单公布,4座金杯分别由平均年龄25岁,来自美国麻省理工学院、美国布朗大学、北京大学在读数学博士斩获。77位获奖者中00后超五成引热…...

JUC并发编程之HashMap(jdk1.7版本)-底层源码探究
目录 JUC并发编程之HashMap(jdk1.7版本)-底层源码探究 HashMap底层源码 - jdk1.7 基本概念 -采取层层递进,问答式 存储Key-Value的结构 常量和成员变量 构造方法 put方法 inflateTable方法 hash方法 indexFor方法 addEntry方法 resize方法 createEntry…...
QT Q_OBJECT 和 signals/slots
Q_OBJECT宏展开 #define Q_OBJECT \ public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static const QMetaObject staticMetaObject; \virtual const QMetaObject *metaObject() const; \virtual void *qt_metacast(const char *); \virtual int qt_metacall(QMetaOb…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...