安卓ANR检测、分析、优化面面谈
前言
一个引发讨论的楔子,以下三种现象有什么区别:
- App停止运行
- App暂无响应
- App闪退
答案:
产生原因不同: - 停止运行是UNCheckException+Error
- 暂无响应是ANRDialog
- 闪退是CheckException+Error
本文讨论的主题是ANR的定义、分类、复现、分析、优化。
ANR定义
Application Not Responding
ANR类型
Input dispatching timed out
按键或触摸事件在特定时间内无响应(origin:5s)
KEY_DISPATCHING_TIMEOUT = 8*1000
12-08 10:51:08.136 763-787/system_process E/ANRManager: ANR in com.xx(com.xx/com.xxactivity.ScreenSaverPicSelectActivity), time=26867631Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 36. Wait queue head age: 8510.1ms.)
Broadcast Timeout
BroadcastReceiver在特定时间内无法处理完成
BROADCAST_FG_TIMEOUT: 10s
BROADCAST_BG_TIMEOUT: 60s
按键和广播事件时间内未响应,时间限定定义在ActivityManagerService.java类中
Service Timeout
Service在特定的时间内无法处理完成,属于小概率类型
service时间内未响应时间限定在ActiveServices.java类中
SERVICE_TIMEOUT = 20*1000;
Activity Timeout
名称 时间
Activity#onPause 500ms
Activity#onStop 10s
Activity#onDestory 10s12-08 17:22:11.296 719-743/system_process W/ActivityManager:
Activity stop timeout for ActivityRecord{2fd135ba u0 com.xx./com.unilife.fridge.home.banner.OpenFullScreenActivity t206}
ANR原因
- 应用进程有一个主线程(main thread)和一个信息队列(main message queue) main thead == activity thread
- 主线程负责处理像Draw、Listen、receive等UI事件
- 主线程负责从消息队列中取出信息并分发它
- 主线程在完成当前信息处理之前,不会再取信息队列中的信息
- 如果主线程在处理当前信息时卡住,没有及时分发,ANR就会出现
ANR检测
ANR检测工具

相关文章:
安卓ANR检测、分析、优化面面谈
前言 一个引发讨论的楔子,以下三种现象有什么区别: App停止运行App暂无响应App闪退 答案: 产生原因不同:停止运行是UNCheckExceptionError暂无响应是ANRDialog闪退是CheckExceptionError 本文讨论的主题是ANR的定义、分类、复现…...
“手撕”链表的九道OJ习题
目录 1. 第一题 2. 第二题 3. 第三题 4. 第四题 5. 第五题 6. 第六题 7. 第七题 8. 第八题 9. 第九题 1. 第一题 删除链表中等于给定值 val 的所有节点。OJ链接 思路如下: 相当于链表的removeAll();制定prev和cur,prev记录前一个节点ÿ…...
解决 Git commit 或 Git merge 跑到 VIM 里面去了
像 git commit 分支名字 或 git merge 分支名字这个命令后面最好加上 -m "消息",如果你不加上 -m "消息"的话,它会打开一个程序让你去加上消息,这个程序还是在控制台里面,只不过是 Linux 里面一个叫做 VIM 的…...
营造科技展厅主题氛围,多媒体应用有哪些新策略?
长久以来,展厅作为线下向公众传递信息的窗口,其设计风格与内容主题紧密相连,展现出千姿百态的面貌。然而,随着数字多媒体技术的日新月异,展厅不再仅仅是传统的信息展示平台,而是成为了引领内容展示潮流的风…...
【UML用户指南】-04-从代码到UML的关键抽象
1、关键抽象 声明了一个名为paint的操作,它的实现调用名为drawString的另一个操作,drawString操作负责在指定的位置上打印“Hello,World!”。在通常的面向对象的方式下,drawString是一个名称为g的参数上的一个操作,g的类型是类Gr…...
(2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
LoRA Learns Less and Forgets Less 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 引言 2. 背景 3. 实验设置 3.2 使用编码和数学基准测试来衡量学习(目标域…...
【Java】面向对象的三大特征:封装、继承、多态
封装 什么叫封装? 在我们写代码的时候经常会涉及两种角色: 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了,这样就降低了类使用者的学习和使用成本&a…...
请问Java8进阶水平中,常用的设计模式有哪些?
设计模式通常被分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。以下是这20个设计模式的分类: 创建型(Creational)设计模式&#…...
力扣--最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出:…...
C# 中的字符与字符串
简介 在C#编程语言中,字符和字符串是处理文本数据的基础。字符是单个的字母或符号,而字符串是字符的集合。本篇博客将详细介绍C#中的字符类型 char 和字符串类型 string,以及它们的基本操作。 字符类型 char char 类型在C#中用于表示单个字…...
TPM之VMK密封
本篇文章主要介绍基于TPM的Bitlocker全盘加密时,VMK密钥的密封(Seal)流程,至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么,这里不做解释,需要自己脑补一下(╮(╯▽╰)╭)…...
Fastjson 反序列化漏洞[1.2.24-rce]
漏洞复现环境搭建请参考 http://t.csdnimg.cn/vSaaw kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。…...
【面试宝藏】Go基础面试题其一
探索Go语言:特性、用法与最佳实践 Go语言(Golang)自发布以来迅速成为开发者社区中的热门选择。本文将探讨Go语言的优势、数据类型、包管理、类型转换、并发处理、同步机制、通道特性及其使用中的注意事项等内容,并回答一些常见的…...
python如何安装pyqt4
第一步,下载.whl文件,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4,这里可以下载不同的python版本对应的包。 第二步,选择一个目录,将下载好的文件放到该目录下,然后cmd下ÿ…...
调用上传文件接口出现格式错误
一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别? 那就是json、和form-data,一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…...
leetcode148. 排序链表,归并法,分治的集大成之作
leetcode148. 排序链表 题目链接 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…...
一维时间序列信号的小波模极大值分解与重建(matlab R2018A)
数学上称无限次可导函数是光滑的或没有奇异性,若函数在某处有间断或某阶导数不连续,则称函数在此处有奇异性,该点就是奇异点。奇异性反映了信号的不规则程度,因为信号的奇异点和突变部分往往携带者重要信息,因此信号的…...
五分钟“手撕”栈
实现代码放开头,供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…...
MAC也能玩转3A大作 Crossover使用指南 crossover运行战地5
众所周知,在Mac上你本不该玩游戏。但是如果你实在犯了这个瘾了,你可以使用Parallel Desktop来运行所有Windows程序。但是繁重的虚拟机对磁盘容量提出了较高的要求,(可能虚拟机用了大概半年就会到60-80GB这样的大小)&am…...
docker私有镜像仓库的搭建及认证
简介: docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…...
VAP:腾讯开源的高性能动画播放引擎,如何让你的应用动起来更流畅?
VAP:腾讯开源的高性能动画播放引擎,如何让你的应用动起来更流畅? 【免费下载链接】vap VAP是企鹅电竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://git…...
Zotero文献管理终极指南:从混乱到高效的研究工作流
Zotero文献管理终极指南:从混乱到高效的研究工作流 【免费下载链接】zotero Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero Z…...
Cosmos-Reason1-7B企业应用案例:研发团队用它做内部技术文档逻辑校验与补全
Cosmos-Reason1-7B企业应用案例:研发团队用它做内部技术文档逻辑校验与补全 1. 引言:技术文档的“逻辑陷阱”与AI解法 想象一下这个场景:你所在的研发团队刚刚完成了一个新模块的开发,需要撰写一份详细的技术设计文档。文档洋洋…...
Onekey:突破Steam清单管理瓶颈的全场景开源解决方案
Onekey:突破Steam清单管理瓶颈的全场景开源解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在数字游戏产业蓬勃发展的今天,Steam平台已成为全球最大的综合性数字…...
Doris从入门到上天系列第六篇:Doris中修改表的操作
一:修改表使用 ALTER TABLE 命令可以对表进行修改,包括 partition 、rollup、schemachange、rename 和 index 五种。语法:ALTER TABLE [database.]table alter_clause1[, alter_clause2, ...];alter_clause 分为 partition 、rollup、schema …...
OpenClaw资源监控方案:Qwen3-32B镜像驱动服务器健康巡检
OpenClaw资源监控方案:Qwen3-32B镜像驱动服务器健康巡检 1. 为什么需要AI驱动的资源监控? 去年我的个人开发服务器连续宕机三次,每次都是因为磁盘写满导致服务崩溃。传统监控工具虽然能发出警报,但往往在问题发生后才会触发&…...
MAX30102传感器总是不准?Arduino避坑指南:从焊接绝缘到手指摆放的5个关键细节
MAX30102传感器精度优化全攻略:从硬件调试到算法校准的完整解决方案 MAX30102作为一款高集成度生物传感器,在心率、血氧监测领域应用广泛,但许多开发者在Arduino平台上使用时常遇到数据不稳定、测量偏差大的问题。本文将系统性地剖析影响测量…...
Pixel Fashion Atelier实战教程:从零构建像素时装生成API服务
Pixel Fashion Atelier实战教程:从零构建像素时装生成API服务 1. 项目介绍与核心价值 Pixel Fashion Atelier(像素时装锻造坊)是一款专为时尚设计师和像素艺术爱好者打造的AI图像生成工具。它基于Stable Diffusion和Anything-v5模型&#x…...
【Mojo跨语言互操作权威配置白皮书】:实测TensorFlow/NumPy/Pandas三方库零报错接入方案
第一章:Mojo跨语言互操作的核心原理与架构定位Mojo并非传统意义上的独立运行时语言,而是以“Python超集”为设计原点、深度嵌入LLVM生态的系统级编程语言。其跨语言互操作能力不依赖FFI桥接层或胶水代码,而是通过统一的中间表示(M…...
AgentCPM深度研报助手10分钟快速部署教程:基于CSDN星图GPU平台
AgentCPM深度研报助手10分钟快速部署教程:基于CSDN星图GPU平台 你是不是也遇到过这种情况?面对海量的行业报告、公司财报,想快速提炼核心观点,却感觉无从下手,或者需要花费大量时间手动整理。现在,有了AI助…...
