专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
复利大王  ·  清华毕业,照样做鸭 ·  14 小时前  
复利大王  ·  赵露思,摊牌了 ·  19 小时前  
今天看啥  ›  专栏  ›  鸿洋

ANR?谁控制了触发时间?

鸿洋  · 公众号  · android  · 2024-11-29 08:35
    

主要观点总结

本文介绍了ANR(Application Not Responding)的概述及其触发时机,重点阐述了Service、Broadcast和ContentProvider的ANR产生机制和计时流程。

关键观点总结

关键观点1: ANR概述及触发时机

ANR是应用程序未响应的缩写,Android系统对一些事件有一定的时间限制,超过预定时间未响应或响应时间过长都会造成ANR。触发时机包括输入事件、广播、Service、ContentProvider等,每种触发的时机都有规定的时间限制。

关键观点2: Service的ANR

Service的ANR在于时间的控制,开始计时的逻辑是通过AMS的realStartServiceLocked方法启动service,在scheduleServiceTimeout中发出一个延时的消息,延时的时间根据是前台服务还是后台服务来判断。服务超时后,会记录ANR的一些信息,并通过Handler发送ANR的相关信息。

关键观点3: Broadcast的ANR

Broadcast的ANR计时开始是通过AMS的broadcastIntentLocked方法,根据标志位决定是前台广播还是后台广播,拿到对应的广播队列后,设置超时时间并通过Handler发送超时时间的消息。取消计时则是在处理串行广播时,如果没有超时则取消message。最后也是在AnrHelper中发送ANR的相关信息。

关键观点4: ContentProvider的ANR

ContentProvider的创建和启动一般在进程启动的时候进行。在AMS的attachApplication方法中,会生成ContentProvider列表并通过Handler延时发送CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG消息,延时时间为10s。计时结束一般发生在进程消失或ContentProvider发布完成时,会移除ANR的超时消息。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照