返回顶部
首页 > 资讯 > 精选 >Android中的ANR简述
  • 778
分享到

Android中的ANR简述

2023-06-04 22:06:56 778人浏览 安东尼
摘要

ANR是Application Not responding,指应用程序未响应,Android系统如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR,因为Android系统对于一些事件需要在一定的时间范围内

ANR是Application Not responding,指应用程序未响应,Android系统如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR,因为Android系统对于一些事件需要在一定的时间范围内完成。ANR由消息处理机制保证,核心原理是消息调度和超时处理,Android在系统层实现了一套精密的机制来发现ANR。

ANR本质上其实是一个性能的问题,它要求主线程在规定的时间内完成一些操作,如果处理超时,则会认为主线程失去了响应其他操作的努力,主线程的耗时操作,都会降低应用程序的响应能力

ANR机制主体实现在系统层,系统进程设计了不同的超时限制来跟踪消息的处理。所有与ANR相关的消息,都会经过系统进程调度,然后派发到应用进程完成对消息的实际处理。 一旦应用程序处理消息不当,超时限制就起作用了,它会收集一些类似CUP使用情况等信息并报告用户进程无响应情况

检测ANR的核心是消息调度和超时处理

而在应用中基本上只有四种情况会导致ANR

  • Service Timeout:Service在特定的时间内无法处理完成

  • BroadcastQueue Timeout:BroadcastReceiver在特定时间内无法处理完成

  • ContentProvider Timeout:内容提供者执行超时

  • inputDispatching Timeout: 按键或触摸事件在特定时间内无响应。

而整个ANR机制可以分为:ANR检测机制和ANR报告机制

Service检测机制

在ANR机制中,Service运行在应用程序的主线程,如果Service的执行时间超过20秒,就会引发ANR。

Android是通过设置定时消息实现监测Service超时的。定时消息是由AMS的消息队列处理的(system_server的ActivityManager线程)。 AMS有Service运行的上下文信息,所以会在AMS中设置一套超时检测机制

输入事件检测机制

应用程序可以接收输入事件(按键、触屏、轨迹球等),当5秒内没有处理完毕时,则会引发ANR。

ANR报告机制

无论哪种类型的ANR发生以后,最终都会调用AppErrors.appNotResponding()方法,想用户或者开发者报告发生ANR了,表现为弹出提示框,提示用户该程序无法响应,打印相关日志

--结束END--

本文标题: Android中的ANR简述

本文链接: https://lsjlt.com/news/240072.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中的ANR简述
    ANR是Application Not responding,指应用程序未响应,Android系统如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR,因为Android系统对于一些事件需要在一定的时间范围内...
    99+
    2023-06-04
  • Android中ANR的示例分析
    这篇文章将为大家详细讲解有关Android中ANR的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android ANR(Application Not Responding)的分析ANR (Ap...
    99+
    2023-05-30
    android anr
  • Android中ANR的分析和解决
    一、认识ANR ANR的定义 ANR,是“Application Not Responding”的缩写,即“应用程序无响应”。如果你应用程序在UI线程被阻塞太长时间,就会出现ANR,通常出现ANR,...
    99+
    2023-09-26
    Framework Android
  • Android WIFI使用简述
    前言   随着Android版本的更新,目前最新的版本是Android 13,并且已经有部分国产手机更新了此版本,对于Android开发者来说,变化其实不那么大,而对于本文章来说就有一些变化。 正文 ...
    99+
    2023-10-12
    android android studio gradle
  • Android RecyclerView使用简述
    RecyclerView使用简述 前言正文一、创建项目二、RecyclerView基本使用① item布局和适配器② 显示数据③ 添加Item点击事件④ 添加Item子控件点击事件⑤ 添加长按事件⑥ 多个子控件点击事件 三、R...
    99+
    2023-08-21
    RecyclerView 多级列表 滑动拖动 多布局 动态数据
  • Java中List的简述
    Java中的List是一种有序的集合,它允许存储重复的元素。List接口是Java集合框架中的一部分,它继承自Collection接...
    99+
    2023-09-13
    Java
  • Android ANR的原理是什么
    本篇内容介绍了“Android ANR的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、ANR说明和原因1.1 简介A...
    99+
    2023-06-21
  • Android系统自动化测试简述
      入职两月有余,从之前的android app开发到现在的测试框架开发,工作中遇到很多问题,趁这次机会分享一下。   Android自动化测试目前可借鉴的经验不多,现...
    99+
    2022-06-06
    自动 自动化 自动化测试 测试 Android
  • 详解Android中Activity的四大启动模式实验简述
    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,...
    99+
    2022-06-06
    启动 activity Android
  • python中魔术方法简述
    魔术方法:***实例化:new :实例化一个对象 方法很少使用,一般使用return super().))new(cls)基类ibject方法来创建实例并返回。 hash:返回一个整数,如果定义这个方法该类的实例就可hash。eq:...
    99+
    2023-01-31
    魔术 方法 python
  • Android ANR的信息收集过程是什么
    本篇内容介绍了“Android ANR的信息收集过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. ANR场景无论是四大...
    99+
    2023-06-21
  • Task Manager 的设计简述
    讲解 Task Manager...
    99+
    2024-04-02
  • 简述Python中的进程、线程、协程
    进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由...
    99+
    2022-06-04
    线程 进程 Python
  • 简述Java中的四种引用类型
    目录简介 强引用 软引用 弱引用 虚引用 简介 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用...
    99+
    2024-04-02
  • android实现session保持简要概述及实现
    在最近写的一个Android中需要请求web服务器中的数据,有一个登录Activity,登录后会到MainActivity,这中间登录和MainActivity都需要请求php...
    99+
    2022-06-06
    session Android
  • Java中简单实用Quartz概述
    目录1.Quartz是什么2. Quartz谁维护?3. 简单的应用3.1 需求描述3.1.1. Spring中自带的3.1.2. Quartz的简单使用4. Quartz相较Spr...
    99+
    2023-02-15
    java  quartz java  quartz使用
  • 简述traceroute命令的原理
    Traceroute命令是用于诊断网络上的数据包传输路径的工具。它通过发送一系列的ICMP回显请求报文,并在每次请求报文的时间戳上增...
    99+
    2023-09-15
    traceroute
  • 简述Python2与Python3的区别
    Python2与Python3的区别 python解释器默认编码(python2与python3的区别一) python2 解释器默认编码:ascii python3 解释器默认编码:utf-8 输入(python2与pyth...
    99+
    2023-01-31
    区别
  • C#中的装箱和拆箱简单描述
    本篇内容主要讲解“C#中的装箱和拆箱简单描述”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中的装箱和拆箱简单描述”吧!C#装箱和拆箱还是别名许多 C#.NET 的书上都有介绍 int -&g...
    99+
    2023-06-17
  • 更改色彩空间中的函数简述
       本文是学习opencv-python官方教程的函数总结 cv2.cvtColor(src, dst, code, dstCn)参数: src:输入图像 dst:输出图像,与输入图像具有相同大小和深度 code:...
    99+
    2023-01-31
    函数 色彩 空间
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作