Android中ANR机制

news/2025/2/12 21:53:46/
        Android中的ANR分为两种,前台ANR和后台ANR。

        前台ANR,是指ANR时对用户可感知,比如拥有当前前台可见的activity的进程,或者拥有前台通知的fg-service的进程,这些是用户可感知的场景。前台ANR,会出现一个系统弹窗,明确告知用户,并提供traces信息,方便用户定位。

        后台ANR, 是指ANR时对用户不可感知,此时系统会直接杀死发生ANR的进程。

        ANR是一套监控Android应用响应是否及时的机制,可以把发生ANR比作是引爆炸弹,那么整个流程包含三部分组成:

        (1)埋定时炸弹:中控系统(system_server进程)启动倒计时,在规定时间内如果目标(应用进程)没有干完所有的活,则中控系统会定向炸毁(杀进程)目标。        

        (2)拆炸弹:在规定的时间内干完工地的所有活,并及时向中控系统报告完成,请求解除定时炸弹,则幸免于难。

        (3)引爆炸弹:中控系统立即封装现场,抓取快照,搜集目标执行慢的罪证(traces),便于后续的案件侦破(调试分析),最后是炸毁目标。

        采用这一机制的主要有Service、Provider和Broadcast Receiver。

        

        除了埋炸弹,Android中还有另外一种ANR机制:扫雷机制。input则采用的就是这种机制。        

        input是在每次收到新的input事件时开始检测,并在开始事件派发时设置埋雷时间点,同时检查队列中所有待处理的事件是否有正在处理并且超时的,有则ANR, 没有则重置所有事件ANR超时时间。

         对于input来说即便某次事件执行时间超过timeout时长,只要用户后续在没有再生成输入事件,就不会触发ANR。但如果检测发现上次事件已经埋雷并且已经超时,则会发生ANR。

        

        炸弹超时时间:

        (1)Service Timeout:比如前台服务在20s内未执行完成,后台服务Timeout时间是前台服务的10倍,200s;

        (2)BroadcastQueue Timeout:比如前台广播在10s内未执行完成,后台60s;

        (3)ContentProvider Timeout:内容提供者,在publish过超时10s;

        (4)InputDispatching Timeout: 输入事件分发超时5s,包括按键和触摸事件。


 

 


http://www.ppmy.cn/news/1381371.html

相关文章

网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择

目录 导言 网络流量监控的重要性 AnaTraf网络万用表的功能与优势 网络故障排除与优化网络性能 结论 导言 在当今数字化时代,计算机网络已经成为企业和组织的核心基础设施。然而,网络流量的管理和监控对于确保网络性能的稳定和优化至关重要。本文将介…

SpringBoot实战项目——博客笔记项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…

python 蓝桥杯之动态规划入门

文章目录 DFS滑行(DFS 记忆搜索) 思路: 要思考回溯怎么写(入参与返回值、递归到哪里,递归的边界和入口) DFS 滑行(DFS 记忆搜索) 代码分析: 学会将输入的数据用二维列表…

Redis缓存问题详解和处理

缓存更新策略 缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库. 常见的解决方案: 缓存空对象 优点: 实现简单, 维护方便缺点: 额外的内存消耗, 可能造成短期的不一致 布隆过滤 优点: 内存占用较少(保存的是数据…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

有来团队后台项目-解析3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、引入Elment-plus安装element-plus安装icons修改tsconfig.json (可选)配置按需自动引入验证是否导入成功展示效果typings 文件夹里生成两个文件总结一、引入Elment-plus elementplus 安装el…

PyTorch之完整的神经网络模型训练

简单的示例: 在PyTorch中,可以使用nn.Module类来定义神经网络模型。以下是一个示例的神经网络模型定义的代码: import torch import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()# 定义神经…

爬虫案例2:playwright 超爽体验

参考链接:https://playwright.bootcss.com/python/docs/intro 目标网站:https://spa6.scrape.center/通过观察,页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…