Android Crash和ANR监控

news2024/12/27 16:15:07

文章目录

    • 一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/401547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++复习笔记--STL的string容器和vector容器

1--string容器string 本质上是一个类,其不同于指针 char*,string 类的内部封装了 char*,用于管理字符串,是一个 char* 型的容器;1-1--string构造函数string 的构造函数原型:string(); // 创建一个空的字符串…

媒体邀约的形式和步骤

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 做媒体服务很多年,今天就与大家分享下媒体邀约都有哪些形式: 1,电话邀约:通过电话与媒体记者进行沟通,邀请其参加活动或接受采…

CDC 长沙站丨云原生技术研讨会:数字兴链,云化未来!

一、活动信息:活动主题:CDC 长沙站丨云原生技术研讨会活动时间:2023 年 3 月 14 日下午 14:30-17:30活动地点:长沙市岳麓区-拓维信息总部 1 楼多功能厅活动参与方式:免门票参与,戳此…

船舶自动驾驶避撞规则

1无人船避碰阶段 如图1所示。 第一阶段:感知阶段。使用雷达、AIS、激光雷达和视觉传感器等感知传感器进行障碍物检测。利用感知到的信息,获得障碍物的运动信息。 第二阶段:决策阶段。利用障碍物的运动信息做出避免冲突的决策。在这一阶段&am…

数据结构排序比较

排序的概念及其运用 (1)排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序&am…

Spring-AOP工作流程

Spring-AOP工作流程 3,AOP工作流程 3.1 AOP工作流程 由于AOP是基于Spring容器管理的bean做的增强,所以整个工作过程需要从Spring加载bean说起: 流程1:Spring容器启动 容器启动就需要去加载bean,哪些类需要被加载呢?需要被增强的类,如:B…

C++ Qt自建网页浏览器

C Qt自建网页浏览器如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<C Qt自建网页浏览器>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐首选。文…

手把手教你实现书上的队列,进来试试?

一.队列的基本概念队列的定义队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。队列是一种先进先出&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIFO。允许插入的一端称为队尾&#xff0c;允…

如何取消电脑开机密码?1分钟可学会,快速取消

​如果小伙伴觉得每次开机都需要输入密码很烦&#xff0c;那么小伙伴应该学会如何取消电脑开机密码。本篇文章&#xff0c;小编将以图文教学的方式&#xff0c;向小伙伴介绍如何在短短的1分钟内&#xff0c;就能够取消电脑开机密码&#xff0c;让小伙伴摆脱烦人的开机密码&…

Pytorch优化器Optimizer

优化器Optimizer 什么是优化器 pytorch的优化器&#xff1a;管理并更新模型中可学习参数的值&#xff0c;使得模型输出更接近真实标签 导数&#xff1a;函数在指定坐标轴上的变化率 方向导数&#xff1a;指定方向上的变化率&#xff08;二元及以上函数&#xff0c;偏导数&am…

windows安装docker-小白用【避坑】【伸手党福利】

目录实操开启 Hyper-V 和容器特性下载docker安装dockercmd中&#xff0c;使用命令测试是否成功报错解决办法&#xff1a;下载linux模拟器wsl&#xff1a;双击打开docker重新打开cmd&#xff0c;输入命令&#xff0c;成功显示sever和clinet实操 开启 Hyper-V 和容器特性 控制面…

项目进度管理:项目经理应该怎么做?

项目经理的职责是非常清晰的、界面分明的。项目经理经常忙碌的原因是&#xff0c;缺乏规划&#xff0c;觉得很多业务都跟自己相关&#xff0c;但不知道到底要做哪些工作&#xff0c;没有把多个角色分清楚。 1、目标。 项目目标是实施项目所要达到的期望结果&#xff0c;一个明…

基于嵌入式linux的OpenSSL源码移植(基于arm64)

SSL是Secure Sockets Layer&#xff08;安全套接层协议&#xff09;的缩写&#xff0c;可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时&#xff0c;提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支…

类和对象(一)

类和对象&#xff08;一&#xff09; C并不是纯面向对象语言 C是面向过程和面向对象语言的&#xff01; 面向过程和面向对象初步认识&#xff1a; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基…

驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记

目录一、FTP服务器移植与搭建1、在ubuntu下安装vsftpd2、在window下安装FileZilla3、移植vsftpd到开发板上4、Filezilla 连接测试5、注意点二、开发板 OpenSSH 移植与使用1、移植 zlib 库2、移植 openssl 库3、移植 openssh 库4、openssh 使用测试三、关于u-boot上的操作及根文…

数据表(二) - 数据表的制作方式

本篇来介绍下数据表的几种制作数据的方式。Excel是大部分数值策划选择用的填数工具&#xff0c;因为Excel是天生为数据处理而生&#xff0c;而Excel转为什么格式就需要选择了。最简单的就是直接将Excel里的数据复制黏贴到文本文件作为游戏数据。这种简单快捷的方式任何人都能做…

DatenLord前沿技术分享 No.20

达坦科技专注于打造新一代开源跨云存储平台DatenLord&#xff0c;致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题&#xff0c;以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。喷泉码具有极高的纠错能力&#xff0c;且具有低延迟、地复…

CnOpenData·A股上市企业数字化转型指数数据

一、数据简介 企业数字化转型是近年来中国社会各界重点关注的领域&#xff0c;但基础数据的不完善在很大程度上制约了相关科学研究的开展。构建合理、科学的数字化转型指标体系有利于学者定量地研究企业数字化的相关问题&#xff0c;也有利于衡量企业的数字化水平。广东金融学院…

Linux驱动开发

一、驱动分类Linux中包含三大类驱动&#xff1a;字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是最大的一类驱动&#xff0c;因为字符设备最多&#xff0c;从led到I2C、SPI、音频等都属于字符设备驱动。块设备驱动和网络设备驱动都要比字符设备驱动复杂。因为其比…

标度不变性(scale invariance)与无标度(scale-free)概念辨析

文章目录标度标度种类名义标度序级标度等距标度比率标度常用标度方法不足标度不变性标度不变&#xff08;Scale-invariant&#xff09;曲线和自相似性&#xff08;self-similarity&#xff09;射影几何分形随机过程中的标度不变性标度不变的 Tweedie distribution普适性&#x…