当前位置: 首页 > news >正文

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. 糟糕的用户体验

1.2 类型

类型:闪退分为Java层的闪退和native层的闪退。

  Application Crash由于java层线程因未捕获异常而终止,由系统的void uncaughtException(Thread t,Throwable e) 方法进行捕获和处理,通常会给出界面弹窗提示“***已停止运行。”。

Application Crash常见原因如下:(都是常见的java异常)

  1. NullPointerException:空指针异常。
  2. SQLException:操作数据库异常类。
  3. ClassCastException:数据类型转换异常。
  4. NumberFormatException:字符串转换为数字类型时抛出的异常。
  5. ClassNotFoundException:这个异常的解释是"指定的类不存在"。
  6. ArithmeticException:这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。
  7. ArrayIndexOutOfBoundsException:数组越界异常
  8. IllegalArgumentException:这个异常的解释是"方法的参数错误"
  9. IllegalAccessException:这个异常的解释是"没有类访问权限"
  10. ArrayStoreException:错误对象存储到数组

二、ANR

2.1 概念

表现:ANR即应用程序无响应。
UI线程被阻塞太长时间,就会出现ANR,然后弹框,结束进程、继续等待。

影响:

  1. 等待时间过长,无提示,无法给出等待的反馈,用户流失
  2. 无法继续完成操作,数据丢失

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测试关注方法

  • 关注界面中的所有按钮、控件的操作有效性,点击是否能产生对应的目标事件
  • 通过自动化对应用的部分运算操作进行长时间负载测试,可有效暴露此问题
  • 通过重复的多次操作可有效暴露此问题
  • 通过对输入框进行异常输入,例如日期输入框,文本输入框等

如何解决:

  1. log文件夹下全局搜am_crash,此时会把log文件下下所有的包含am_crash的行显示出来
  2. crash问题很好看,基本上就代码写的有问题,针对出现的问题修改一下就好

3.2 ANR测试关注方法

  • 对部分上传文件较大的页面、保存文件信息较多的动作,比如电话本信息、带有图片的记事本保存等操作。
  • 对某一时间的网络进行极限使用,在被测应用的一个场景无法使用网络的情况下关注。
  • 重复多次的操作可能导致ANR事件,可使用Monkey工具进行测试。
  • 多任务、多线程应用内存占用极限时

如何解决:

  1. log文件夹下全局搜am_anr,此时会把log文件下下所有的包含am_anr的行显示出来(也可以搜activitymanager: ANR)
  2. 一般同一个时间点的anr log会在不同的文件中出现两次,一次是logxxx.txt中,一次是在crash_xxxxxx文件夹中的aplog_ANR_时间文件中
  3. 进入到crash_xxxxxx文件夹下,找到一个data_app_anr@xxx.txt文件
  4. 在data_app_anr@xxx.txt文件中找到"main" prio=5 tid=1 Nativ这一行,往下看会有一些异常log,这些log描述的就是问题原因
  5. ANR如果是由于主线程阻塞,在data_app_anr@xxx.txt中的"main" prio=5 tid=1中会显示 block

四、如何记录与处理

4.1 记录保存问题现场

  1. 系统各类日志信息收集,如果可以建议开发提供一个一键式日志收集功能或自己编写一个一键式日志收集脚本
  2. 保存进程crash的coredump信息,便于后续开发进一步定位分析

4.2 记录问题出现条件或步骤

  1. 出现问题后,第一时间记录本次问题发生前各类预置条件:app或系统版本信息,测试工具信息、硬件环境信息、被测试对象版本信息等等
  2. 自动化或手动测试操作步骤信息记录:如果是自动化测试,要保存好自动化用例步骤;如果是手动测试,养成良好的记录习惯,记录好测试步骤
  3. 很多问题是概率出现的,问题定位解决过程中,很有可能需要你复现问题。 养成良好习惯,可以降低问题复现成本

4.3 协助开发及相关人进行问题定位分析

  1. 平时测试过程中,与开发及周边相关人员,建立好良好沟通矩阵
  2. 问题出现后,首先详细描述问题现象,拉通开发人员协助收集问题信息及开展问题定位

4.4 风险告知,避免问题扩大化

  1. 养成良好的风险意识,结合版本发布计划,与项目经理、测试经理等相关人明确问题影响及风险
  2. 譬如:如果版本马上要发布了,你测试过程中遇到致命的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的高可用实际上就是将自己作为服务向其他服务注册中心注册自己&#xff0c…...

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…...

APM新添加UAVCAN设备

简介 UAVCAN是一种轻量级协议,旨在通过CAN总线在航空航天和机器人应用中实现可靠通信。要实现通信,最基本需要data_type_ id, signature、数据结构、设备程序初始化。 添加设备数据结构文件(.uavcan格式) 1.在以下路径添加设备数据结构文件,根据设备类…...

【C++】string类基本用法

文章目录string类基本用法1. 为什么要学习string类?1.1 C语言中的字符串2. 标准库中的string类2.1 string类2.2 string类的常用接口说明小试牛刀1. 仅仅反转字母2. 字符串中第一个唯一字符3. 字符串中最后一个单词的长度string类基本用法 1. 为什么要学习string类&…...

KDZD耐电压高压击穿强度测试仪

一、技术参数 01、输入电压: 交流 220 V。 02、输出电压: 交流 0--50KV ; 直流 0—50kv 。 03、电器容量:3KVA。 04、高压分级:0—50KV,(全程可调)。 05、升压速率:0.1KV/s-…...

数组和指针面试题的补充(细的抠jio)

生命是一条艰险的峡谷&#xff0c;只有勇敢的人才能通过。 ——米歇潘 说明&#xff1a;用的vs都是x86的环境&#xff0c;也就是32位平台。 建议&#xff1a;对于难题来说&#xff0c;一定要配合画图来解决问题。 第一题&#xff1a; #include<stdio.h> int…...

Java多线程基础

文章目录Java多线程基础一、什么是进程与线程&#xff1f;二、线程和进程的区别【重点】三、线程的创建方式【重点】1. 继承Thread类2. 实现Runnable接口3. lambda 表达式四、Thread的常见属性线程中断自己定义一个标志位Thread类提供的静态方法线程的状态Java多线程基础 一、…...

爆品分析第5期 | 一条视频带货3700+,这款斋月不锈钢厨具套装火了!

俗话说民以食为天&#xff0c;吃在任何一种文化中都占据重要的位置&#xff0c;要做出一道美味佳肴&#xff0c;除了食材、烹饪者的自身厨艺之外&#xff0c;还少不了一口好锅。新冠疫情以来&#xff0c;全世界范围内的封闭让很多人养成了居家做饭的习惯&#xff0c;不仅为厨具…...

团队管理的七个要点

要掌握团队管理的要点和做好团队管理工作&#xff0c;不是一件容易的事&#xff0c;但也远非想象中那么难。首先&#xff0c;我个人比较推荐所有团队管理者都能阅读下《经理人参阅&#xff1a;团队管理》&#xff08;注意该书仅可其官网获得&#xff09;这本佳作。相信会为你带…...

Go语言容器之map、list和nil

一、map map和C中map一样&#xff0c;里面存放的是key-value键值对在Go中map是引用类型&#xff0c;声明语法&#xff1a;var map变量名 map[key的类型]value的类型package mainimport "fmt"func main() {var mp map[string]intmpls : map[string]int{"one&quo…...

软件测试的案例分析 - 闰年1

&#xff08;这是关于博客质量分的测试 https://www.csdn.net/qc) 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生之后, 总有人问: 为什么这个bug 没有测出来啊?! 我们看看一类简单的bug是如何发生的&#xff0c;以及如何预防…...

【强化学习】强化学习数学基础:值函数近似

值函数近似Value Function ApproximationMotivating examples: curve fittingAlgorithm for state value estimationObjective functionOptimization algorithmsSelection of function approximatorsIllustrative examplesSummary of the storyTheoretical analysisSarsa with …...

如何查询建造师证有没有在项目上/石家庄百度seo代理

本人的下载版本是mysql-installer-community-5.6.19.0.msi 该版本安装需要NET Framework 4的支持&#xff0c;需要先安装NET Framework 4。 第一步&#xff1a;安装 第二步&#xff1a;接受协议 第三步&#xff1a;跳过更新检查&#xff0c;避免卡住 第四步&#xff1a;选择“…...

做国外网站做外贸/国内打开google网页的方法

了解日志的各种定义后,这里分享一下从网上淘来的一些对日志分析的脚本1.查看apache的进程数ps -aux | grep httpd | wc -l2.分析日志查看当天的ip连接数cat default-access_log | grep "10/Dec/2010" | awk {print $2} | sort | uniq -c | sort -nr3.查看指定的ip在当…...

网站建设网站服务/免费开网店免费供货

公司最近要做一个项目 目的是将原有的项目通过一个按钮点击转换为国际版&#xff08;简单的说就是将语言进行切换 &#xff09;整理了一下网上的答案自己跟着做了一个案例 现将步骤做如下介绍&#xff1a; 1、安装i18n的依赖 npm install vue-i18n2、安装完后需要手动建立两个…...

广州做外贸网站公司/在线工具seo

/*** 展开树节点的第一层*/ function openFirstTreenode(){// 获取树对象var treeObj $.fn.zTree.getZTreeObj("treeDemo");/* 获取所有树节点 */var nodes treeObj.transformToArray(treeObj.getNodes());//当再次点击节点时条件不符合,直接跳出方法// 遍历树节点…...

网站服务器维护费用/友链互换平台推荐

今天的日程很满 1考试 2中午去拿任务,拿ppt模板 3写日志和技术博客 4网上考试 5询问学院工程师考试信息 6交.net报告 7看开源程序 8wpf分析 9写控件文档 10下载安装试用vs2008 11看ajax控件 12看rss数据订阅 转载于:https://www.cnblogs.com/lzlynn/archive/2007/12/05/983299.…...

苏州地区网站制作/青岛百度seo排名

离散均匀分布 n 个值中的每一个具有相等的概率 1/ n 截图来源&#xff1a;Discrete Uniform Distribution 例子&#xff1a; 投掷一个骰子6个值中每个值出现的概率为 1/61/61/6 投掷两个骰子出现的两值之和&#xff0c;结果分布不再均匀&#xff0c;因为并非所有和的概率都相等…...