【Android】ANR监控治理技术方案

news2024/11/23 11:34:20

一、 背景

  • 1、 bugly针对crash监控做的比较好,但是对anr监控,早期版本监听 /data/anr 目录的变化可以拿到数据,但是现在高版本已经没有权限监听此目录,当前数据非常少,结合历次数据来看对我们解决ANR问题没有任何帮助。
  • 2、 当前ANR数据主要来自手机厂商系统监控得到的的Anr Top数据excel,因为他们是在系统层面做了监控,数据准确性相对第三方比较高,但是依赖于手机厂商测试人员提供给我们数据,不是万全之策,因为随时有断供的风险。

二、 目标

要求ANR率在万5之下,我们目前已经到了万10,明确超标了。

三、技术选型

3.1 OPPO系统ANR监控

由于OPPO系统监控ANR数据有比较高的准确性,目前可以想到的技术方案是由OPPO监控平台APM开放ANR数据查询接口数据给阅文,由阅文后台去查询获取。做一个ANR实时数据呈现,通过这个ANR数据帮助我们去监控和解决ANR问题。

目前已知这个方案行不通。OPPO侧有数据安全要求,禁止外部实时查询此数据。

只能是一个版本查一次,或者一周查一次。可以建立一个机制,要求OPPO一周提供一次TOP100的ANR数据excel,协助我们解决ANR问题。

3.2 谷歌官方严苛模式StrictMode预防ANR

严苛模式StrictMode将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。你可以强制用警告代替崩溃crash,也可以仅将警告计入日志让你的应用继续执行。StrictMode是一个十分有用的类,它可以很方便地应用于检查Android应用程序的性能和存在的问题。当开启这个模式后,开发者能很好地检查应用中存在的潜在问题。
现状:当前版本没有开启,此特性可利用起来,在debug版本开启。

3.2 第三方开源ANR监控方案
框架xCrashmatrixBlockCanaryacraANR-WatchDog
社区热度 2.9K9.9K6.3K5.9K2.4k
出品方爱奇艺微信个人开发者国外开发者国外开发者
维护情况仍在维护仍在维护已无人维护仍在维护已无人维护
技术原理linux信号捕获linux信号捕获+慢函数监控handler监控ANR消息打印看门狗监控看门狗监控
优点成熟不易裁剪成熟可裁剪可作为补充手段国外成熟兼容性好
缺点引入体积过大引入So监控原理过时无中文,难定制捕获ANR会有很多疏漏

综合分析,matrix的功能成熟可裁剪的特性,并且在微信大规模应用过,而且仍然在维护,决定引入matrix。

3.3 Matrix监控功能,选择性引入Trace Canary

Matrix-android 当前监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等等。

  • ● APK Checker: 针对 APK 安装包的分析检测工具,根据一系列设定好的规则,检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪
  • ● Resource Canary: 基于 WeakReference 的特性和 https://github.com/square/haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具
  • ● Trace Canary: 监控ANR、界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题
  • ● SQLite Lint: 按官方最佳实践自动化检测 SQLite 语句的使用质量
  • ● IO Canary: 检测文件 IO 问题,包括:文件 IO 监控和 Closeable Leak 监控
  • ● Battery Canary: 监控 App 活跃线程(待机状态 & 前台 Loop 监控)、ASM 调用 (WakeLock/Alarm/Gps/Wifi/Bluetooth 等传感器)、 后台流量 (Wifi/移动网络)等 Battery Historian 统计 App 耗电的数据
  • ● MemGuard 检测堆内存访问越界、使用释放后的内存、重复释放等问题

三、 落地方案

在这里插入图片描述

1、在我们服务端开发人力有限的情况下,采用matrix 采集 +严苛模式strickMode监控采集警告+ bugly上报数据+ bugly呈现数据的总体架构。

2、把anr数据,慢函数,打包成异常通过 CrashReport.postCatchedException()上报到bugly的错误, 在数据后台查看错误。

3、由于监控成本会影响到APP运行性能,所以无法在线上进行监控,控制在debug模式下测试阶段下进行,防止影响线上。

其它问题

线上监控加imei监控
安全合规问题
bugly冲突问题
包体积大小问题

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

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

相关文章

FreeRTOS学习11——时间片任务调度

时间片任务调度 时间片任务调度 时间片任务调度 概念:时间片调度主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务,也就是说 CPU 轮流运行优先级相同的任务,每个…

怎么把模糊照片变清晰?4种方法助你修复图片清晰度!

在我们的日常生活中,模糊的图片常常成为影响视觉体验的一大障碍,无论是由于时间久远导致老照片分辨率降低,还是拍摄时因手抖造成的画面模糊,都会让我们的图片质量大打折扣。为了帮助你解决这一困扰,我们为你整理了四种…

Pytorch学习--神经网络--完整的模型验证套路

一、选取的图片 全部代码依托于该博客 二、代码(调用训练好的模型) import torch import torchvision from PIL import Image from model import *img_path "dog.png" image Image.open(img_path)print(image.size)transform torchvisi…

力扣 LeetCode 454. 四数相加II(Day3:哈希表)

解题思路: 使用map 四个数组两两一组 前两个数组的各个值遍历相加,和为key,出现的次数为value 后两个数组的各个值遍历相加,如果该值的负数能在map中找到(表示能抵消为0,符合题意四数之和为0&#xff0…

期权懂|交易股票期权该怎么操作?又该如何开户?

期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 交易股票期权该怎么操作?又该如何开户? 一、交易股票期权主要包括以下几个步骤: (1)选择交易平台‌: 选择…

Unity类银河战士恶魔城学习总结(P124 CharacterStats UI玩家的UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了玩家属性栏,仓库,物品栏UI的制作 UI_StatSlot.cs 这个脚本是用来在Unity的UI上显示玩家属性&#xf…

【SSL-RL】自监督强化学习:自预测表征 (SPR)算法

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

Docker部署kafka集群

1,编写Docker Compose文件 编写一个docker-compose.yml文件来定义服务,以下定义了一个Zookeeper服务和三个Kafka Broker服务: 注意:把10.0.8.4替换成宿主IP version: 3.8services:zookeeper:image: bitnami/zookeeper:latestconta…

Qt滑动条美化自定义

效果展示 主要代码 头文件 下面是hi控件的头文件,我们继承一个Qt原生的滑动条类QSlider,然后在基类的基础上进行自定义,我会对重要的变量进行解析: class XSlider : public QSlider {Q_OBJECT public:explicit XSlider(QWidget…

wordpress实用功能A5资源网同款 隐藏下载框 支付框 需要登录才能查看隐藏的内容

实用功能 隐藏下载框 支付框 需要登录才能查看隐藏的内容, 个人网站防天朝申查实测有效 。 登录前,未登录: 登录后,已登录: 功能说明 该代码段的主要功能是隐藏支付框并为未 登录用户显示一条提示信息,告知他们需要…

Vue 简单入手

前端工程化(Front-end Engineering)指的是在前端开发中,通过一系列工具、流程和规范的整合,以提高开发效率、代码质量和可维护性的一种技术和实践方法。其核心目的是使得前端开发变得更高效、可扩展和可维护。 文章目录 一、Vue 项…

Spingboot 定时任务与拦截器(详细解释)

在 boot 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时 任务处理器 Scheduled 注解,另一种就是使用第三方框架 Quartz , Spring Boot 源自 SpringSpringMVC &#…

无人机+无人车+无人狗+无人船:互通互联技术探索详解

关于“无人机无人车机器狗(注:原文中的“无人狗”可能是一个笔误,因为在实际技术领域中,常用的是“机器狗”这一术语)无人船”的互通互联技术,以下是对其的详细探索与解析: 一、系统架构与关键…

ima.copilot-腾讯智能工作台

一、产品描述 ima.copilot是腾讯推出的基于腾讯混元大模型技术的智能工作台,通过先进的人工智能技术,为用户提供了一个全新的搜读写体验,让知识管理变得更加智能和高效。它不仅是一个工具,更是一个智能的伙伴,能够帮助…

集合卡尔曼滤波(EnsembleKalmanFilter)的MATLAB例程(三维、二维)

本 M A T L A B MATLAB MATLAB代码实现了一个三维动态系统的集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)示例。代码的主要目的是通过模拟真实状态和测量值,使用 EnKF 方法对动态系统状态进行估计。 文章目录 参数设置初始化真实状态定义状…

【动手学电机驱动】STM32-FOC(5)基于 IHM03 的无感 FOC 控制

STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)IHM03 电机控制套件介绍 STM32-FOC(5&…

光老化测试的三种试验:紫外老化、氙灯老化、碳弧灯老化

光老化是指材料在阳光照射下,由于紫外线、热和氧气的共同作用而发生的物理和化学变化。这种现象对纺织材料、塑料材料、涂料材料和橡胶材料的应用有显著影响。这些材料户外家具、汽车内饰和户外供水排水管道、建筑外墙涂料、汽车漆面、船舶涂料、汽车轮胎、密封件、…

VMWare安装包及安装过程

虚拟机基本使用 检查自己是否开启虚拟化 如果虚拟化没有开启,需要自行开启:百度加上自己电脑的品牌型号,进入BIOS界面开启 什么是虚拟机 所谓的虚拟机,就是在当前计算机系统中,又开启了一个虚拟系统 这个虚拟系统&…

消费的外部性

大学宿舍,遇到在你睡觉的时候开外放不戴耳机的室友,但中午12点,室友却在那拉上窗帘睡觉。能带饭吗?能代签到吗?能倒个垃圾吗?能带个外卖吗?自己永远麻烦别人,你要让他帮个忙又这推那…

易趋亮相2024 PMI项目管理大会

11月9日-10日,2024 PMI项目管理大会在广州圆满举办,项目管理行业优秀代表企业——易趋(隶属深圳市蓝云软件有限公司),携最新产品和解决方案亮相本次展会。 (主论坛现场) 本届大会以“‘项’有所成 行以致远…