文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中的ANR简述

2023-06-04 22:47

关注

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

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

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

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

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

而整个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了,表现为弹出提示框,提示用户该程序无法响应,打印相关日志

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯