Android ANR分析总结
1、ANR介绍
ANR(Application Not Responding)指的是应用程序无响应,当Android应用程序在主线程上执行长时间运行的操作或阻塞I/O操作时发生。这可能导致应用程序界面冻结或无法响应用户输入。
1、Service ANR:前台20s,后台200s;startForeground超时10s
2、BroadcastReceiver ANR:前台10s,后台60s
3、Input ANR:按键或触摸事件在5s内无响应
4、ContentProvider ANR:10s,少见
2、抓取离线日志
使用CAT或QATT解析dbg文件
解析完成相关Log如下
3、Service ANR
Service ANR原理,当框架启动APP对应的Service时。一边在框架自身发起一个handler超时消息,一边发送启动Service 的handler消息到APP的主线程。当APP Service中的onCreate方法调用后,会回调框架中的serviceDoneExecutingLocked来取消定超时消息。正常情况下如此
如果是APP本身问题,可以通过SYS_FTRACE搜索serviceCreate来确定执行时长。
同步其他Log进行分析确认。
执行超时消息,触发ANR
1、若binder耗时(比较少见);
2、app主线程执行一些消息耗时,导致service相关的消息得不到执行;
3、Service本身的周期方法onCreate,onStartCommand等执行一些耗时操作;
4、BroacastReceiver 超时
Android中有两种广播机制:
1、静态广播接收者:通过AndroidManifest.xml的标签来申明的BroadcastReceiver。
2、动态广播接收者:通过Context.registerReceiver()方式注册的BroadcastReceiver,动态注册更为灵活,可在不需要时通过unregisterReceiver()取消注册。
从广播发送方式可分为三类:
1、普通广播:通过Context.sendBroadcast()发送,可并行处理
2、有序广播:通过Context.sendOrderedBroadcast()发送,串行处理
3、Sticky广播:通过Context.sendStickyBroadcast()发送
其中前台广播ANR 10s,后台广播ANR 60s
发送广播的逻辑主要在框架中的BroadcastQueue的函数processNextBroadcastLocked中。对于并行广播mParallelBroadcasts直接全部发送。对于有序广播,每次设置超时时间,发送一条。APP接收到关播后,调用finish来进行下一条循环。
如果是APP本身问题,可以通过SYS_FTRACE搜索broadcastReceiveComp来确定执行时长。
5、Input超时
检查 Relayout windows时间点(此时 activity 能被看到)。如果发 生 ANR 时,Focus焦点已经切换过来,则需要APP分析,否则需要系统侧进一步分析。
其中绘制过程比较复杂,相关流程整理如下,后续更新
6、ContentProvider 超时
后续补充
7、其他相关信息确认
很多时候,ANR不一定是APP本身的问题,有可能是系统卡顿或者IO问题导致的。需要结合相关ANR Log中的其他信息一起分析。
1、CPU的使用率
2、剩余内存大小
EVENT Log中搜killinfo
参考文档
https://www.cnblogs.com/linghu-java/articles/10307915.html
https://blog.csdn.net/Code1994/article/details/120509705
相关文章:

Android ANR分析总结
1、ANR介绍 ANR(Application Not Responding)指的是应用程序无响应,当Android应用程序在主线程上执行长时间运行的操作或阻塞I/O操作时发生。这可能导致应用程序界面冻结或无法响应用户输入。 1、Service ANR:前台20s࿰…...

Three.js 纹理贴图
1. 纹理贴图 在Three.js中,纹理贴图是一种将二维图像贴到三维物体表面的技术,以增强物体的视觉表现。纹理贴图可以使物体表面更加真实、细腻,为场景增色不少。 在Three.js中,纹理贴图的加载主要通过THREE.TextureLoader类实现。…...

2024年软件设计师中级(软考中级)详细笔记【12】软件系统分析与设计
目录 前言第12章 软件系统分析与设计12.2 数据库分析与设计12.2.1 数据库设计的策略与步骤12.2.2 需求分析12.2.3 概念结构设计12.2.4 逻辑结构设计12.2.5 数据库的物理设计 结语 前言 在备考软件设计师中级考试的过程中,我遇到了些许挑战,也收获了宝贵…...

【Windows】CMD命令学习——系统命令
CMD(命令提示符)是Windows操作系统中的一个命令行解释器,允许用户通过输入命令来执行各种系统操作。 系统命令 systeminfo - 显示计算机的详细配置信息。 tasklist - 显示当前正在运行的进程列表。 taskkill - 终止正在运行的进程。例如&am…...

React第一个项目
运行效果: 知识讲解: 组件:先定义后使用,用户界面的构成要素(标签、css和JavaScript) 定义组件: 导出组件:export default 前缀是JavaScript标准语法 定义函数:function …...

计算机网络基本概念总结
IP地址 概念 使网络中的设备都有唯一的地址标识,用于表示其在网络中的位置。 格式 IP地址是一个32位的二进制数,通常被分割为4个8位二进制数(也就是4个字节),如:01100100.00001000.00001010.00000110。通常…...

考研要求掌握C语言(归并排序)
归并排序考啥? 在考研中归并排序只出在选择题,理解原理很重要 且在考研中考两两归并,还是比较简单的 归并排序原理 就是每次分一半,直到每一半只含有一个或不能再分时,一半一半的进行排序,最终合并两个…...

Spring Authorization Server:实现OAuth2认证服务
Spring Authorization Server为构建安全的SpringBoot应用提供了一系列解决方案,本节课程我们将结合OAuth2来实现认证服务,该认证服务将支持常用的OAuth2授权模式和刷新Token。 Spring Authorization Server简介 Spring Authorization Server是一个安全框架,它提供了OAuth 2.…...

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址: Gitee:https://gitee.com/raymond9/shell Github:https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…...

ScrumMaster认证机构及CSM、PSM、RSM价值解析
近十年Scrum在国内备受关注,成为一种最流行的现代敏捷工作方式。ScrumMaster这一独特的角色,在企业内部推动Scrum落地的过程中越来越重要。各种ScrumMaster认证课程也蜂拥而至,甚至鱼目混珠。 我们为大家梳理了目前市面上出现的ScrumMaster认…...

借助 Pause 容器调试 Pod
借助 Pause 容器调试 Pod 在 K8S 中,Pod 是最核心、最基础的资源对象,也是 Kubernetes 中调度最小单元。在介绍 Pause 容器之前需要先说明下 Pod 与容器的关系来理解为什么需要 Pause 容器来帮助调试 1. Pod 与 容器的关系 Pod 是一个抽象的逻辑概念&…...
PostgreSQL 开启密码验证插件
我们知道在数据安全和等保要求中,用户的密码复杂度需要满足一定的条件,那么在 PostgreSQL 数据库中如何保证创建的用户的密码满足这些要求呢。 [rootlocalhost ~]# su - postgres [postgreslocalhost ~]$ cd /usr/local/pgsql-12.8/data/ [postgresloca…...

Go 语言已立足主流,编程语言排行榜24 年 11 月
Go语言概述 Go语言,简称Golang,是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计,并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标,…...
flutter下拉刷新上拉加载的简单实现方式三
使用 CustomScrollView 结合 SliverList 实现了一个支持下拉刷新和上拉加载更多功能的滚动列表,对下面代码进行解析学习。 import dart:math;import package:flutter/material.dart;import custom_pull/gsy_refresh_sliver.dart; import package:flutter/cupertino…...
【C++ 20进阶(2):属性 Attribute】
【C 20进阶(2):属性 Attribute】 原文:https://blog.csdn.net/weixin_44259356/article/details/143663492 引言 本篇文章为系列文章将着重介绍C20新特性,一是希望可以和大家交流分享,二是也便于自己巩固…...

【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法
目录 一、相关问题 1. 什么是虚拟内存?为什么需要虚拟内存? (1)内存扩展 (2)内存隔离 (3)物理内存管理 (4)页面交换 (5)内存映…...

力扣617:合并二叉树
给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠&#…...
软件设计师 - 第1章 计算机网络概论
计算机系统硬件基本组成 输入设备:键盘,鼠标输出设备:显示器,打印机...存储器:主存储器,如内存;辅助存储器,如外存运算器:与控制器一同集成在CPU中控制器:与…...

方案丨车险保单OCR:3秒钟完成保单审核
在涉及车辆交易的各种情况下,记录和管理车险保单信息是一项必不可少的任务。然而,面对数量庞大的电子保单,传统的手工录入方式显得尤为低效——它不仅消耗大量时间,而且容易出现错误,这不仅影响了用户的满意度…...

Jmeter中的监听器(一)
监听器 1--查看结果树 用途 调试测试计划:查看每个请求的详细信息,帮助调试和修正测试计划。分析响应数据:查看服务器返回的响应数据,验证请求是否成功。检查错误:识别和分析请求失败的原因。 配置步骤 添加查看结果…...
csharp ef入门
全局安装 dotnet ef 命令行工具 要 全局安装 dotnet ef 命令行工具(即在任何项目目录下都能使用 dotnet ef 命令),请按以下步骤操作: ✅ 全局安装步骤(推荐) 在终端中运行以下命令: bash复制…...

gitLab 切换中文模式
点击【头像】--选择settings 选择【language】,选择中文,点击【保存】即可。...
40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类(类写法)
40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类(类写法) 一、类结构设计解析 1.1 基类设计 class Base:async_driver None # 🚗 存储浏览器驱动实例async def get(self, url: str http://secure.smartbearsoftware.com/.…...
x86_64-apple-ios-simulator 错误
Could not find module ImagePicker for target x86_64-apple-ios-simulator; found: arm64, arm64-apple-ios-simulator 解决方案一 添加 arm64。 搜索 Excluded Architectures ,添加arm64 解决方案二 在Podfild中,添加佐料。在文件的最下方添加如…...
VectorNet:自动驾驶中的向量魔法
在自动驾驶的世界里,车辆需要像超级英雄一样,拥有“透视眼”和“预知未来”的能力,才能在复杂的交通环境中安全行驶。今天,我们要介绍一个神奇的工具——VectorNet,它就像是给自动驾驶车辆装上了一双智能的眼睛&#x…...

【快速解决】数据库快速导出成sql文件
1、cmd直接打开 输入命令 mysqldump -u用户名 -p密码 数据库名 > 导出文件名.sql修改成自己mysql的用户名和密码,和要导出的数据库名称,给导出的文件起一个名字。 如图所示 这样就成功了。...

MySQL强化关键_017_索引
目 录 一、概述 二、索引 1.主键索引 2.唯一索引 3.查看索引 4.添加索引 (1)建表时添加 (2)建表后添加 5.删除索引 三、树 1.二叉树 2.红黑树 3.B树 4.B树 (1)为什么 MySQL 选择B树作为索引…...

uniapp分包配置,uniapp设置subPackages
在使用uniapp开发过程中,由于项目比较大,无法直接上传,需要分包后才可以上传。 步骤: 1、在pages同级目录下创建分包的目录(pages_second),把要分包的文件放到该目录下; 2、在pag…...
Splunk Validated Architecture (SVA):构建企业级可观测性与安全的基石
Splunk Validated Architecture (SVA) 是 Splunk 官方提供的一套经过严格测试、性能验证和最佳实践指导的参考架构蓝图。它并非单一固定方案,而是根据企业数据规模、性能需求、高可用性目标和合规要求,提供一系列可落地的部署模型。SVA 的核心价值在于为…...
OSG编译wasm尝试
最近遇到一个情况,需要尝试一下OSG到webassembly 发现官网有教程 于是顺着看了看,默认教程是xubuntu的一个系统跑的,但是我本着试一试的想法,拉下来直接在windows上跑,奇奇怪怪的报错简直头皮发麻 然后怎么办呢&#x…...