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

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&#xff0…...

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秒钟完成保单审核

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

Jmeter中的监听器(一)

监听器 1--查看结果树 用途 调试测试计划:查看每个请求的详细信息,帮助调试和修正测试计划。分析响应数据:查看服务器返回的响应数据,验证请求是否成功。检查错误:识别和分析请求失败的原因。 配置步骤 添加查看结果…...

3步解锁Windows远程桌面多人连接:RDP Wrapper Library完整指南

3步解锁Windows远程桌面多人连接:RDP Wrapper Library完整指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾因Windows家庭版无法支持多人远程桌面连接而感到困扰?当团队成员需要…...

LeetCode 930:和相同的二元子数组 | 前缀和与哈希表

LeetCode 930:和相同的二元子数组 | 前缀和与哈希表 引言 和相同的二元子数组(Binary Subarrays With Sum)是 LeetCode 第 930 题,难度为 Medium。题目要求在二元数组(元素只有 0 和 1)中找出子数组和等于 …...

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂 副标题: 从像素到概念的函数映射,附完整训练流程实战 一、痛点:为什么神经网络这么难理解? 很多初学者第一次接触神经网络时,会被各种术语绕晕:神经元、权重、偏置、激活函数、反向传播、梯度下降… 感觉像…...

【光学】偏振光线追迹Matlab仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

企业级RAG落地需要考虑的七个优化指标

在企业级RAG应用中,单纯跑通流程只是起点。要让系统真正稳定、准确、高效、安全地服务于业务,需要从以下七个维度进行系统性优化。这些建议基于生产环境的最佳实践总结。 一、检索质量优化(核心中的核心) 1.1 分块策略精细化文档类…...

避开GD32F303 PWM配置的3个常见坑:从时钟使遇到占空比设置

GD32F303 PWM实战避坑指南:从时钟配置到波形调优 第一次接触GD32F303的PWM功能时,我像大多数开发者一样,以为按照手册配置就能顺利输出波形。直到示波器上出现杂乱的信号,才意识到这个看似简单的功能背后藏着不少"坑"。…...

【收藏干货】2026 版大模型推理底层原理拆解!吃透 Prefill/Decode 与 vLLM 核心优化

近两年大模型技术飞速迭代,全面重构了 AI 应用开发体系。日常开发中大家热议模型参数规模、Agent 智能体、多模态交互能力,可真正落地部署上线后,决定产品最终使用体验的核心,往往并非模型本身性能,而是容易被忽略的大…...

告别报错!手把手教你用Pycharm 2023.2 + Git搞定Manim社区版安装(附国内镜像源配置)

Manim社区版极速安装指南:PyCharm 2023.2与Git的完美协作方案 当数学可视化遇上Python开发神器PyCharm,Manim社区版的安装过程却常常成为新手的第一道门槛。不同于常规教程的线性步骤,我们将以"问题-解决"为主线,直击两…...

深度评测2026年TOP10降AI率平台:找到导师推荐的“无痕降AIGC”终极方案

AI写作工具的兴起让论文写作和内容创作变得前所未有的高效,许多学生和职场人都开始依赖这类工具来提升效率、节省时间。然而,随着技术发展,高校、平台和期刊对AI生成内容的检测标准也在不断提高,越来越多的用户发现,自…...

嵌入式开发硬件生态构建:MIPI屏、UVC摄像头与4G模块的选型与集成实战

1. 项目概述:一次面向嵌入式开发者的硬件生态补全最近,我们团队负责的睿擎派(一个基于瑞芯微RK3566/RK3588等主流芯片的嵌入式开发板品牌)项目,迎来了一次重要的硬件配件更新。这次上新不是简单的“换个壳”&#xff0…...