【朝花夕拾】Android性能篇之()ANR篇--草稿

1、ANR概念

2、ANR发生场景

   Android开发者官网 上说到了两个原因:(1)点击按键或者触摸屏幕等输入事件在5s内没有响应;(2)10s内没有完成广播事件。如下所示:

Android will display the ANR dialog for a particular application when it detects one of the following conditions: ● No response to an input event (such as key press or screen touch events) within 5 seconds. ● A BroadcastReceiver hasn't finished executing within 10 seconds.

当时坊间给出的原因更多

  (1)点击按键或者触摸屏幕等输入事件在5s内没有响应。

  (2)BroadcastReceiver事件(onReceive(...)方法)在规定的时间内没有处理完(前台广播为10s,后台广播为60s)。

前台广播

   将flag设置为Intent.FLAG_RECEIVER_FOREGROUND,该广播将成为前台广播。当发送广播时,会允许接收者以前台的优先级运行,有更段的时间间隔,可以减少接收延迟。如下所示:

1  Intent mIntent = new Intent(string action);                                 
2  mIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 
3  mContext.sendBroadcast(mIntent); 

后台广播

  正常广播的接收者为后台优先级,即默认为后台广播,不会被自动提升。或者是将flag设置为Intent.FLAG_FROM_BACKGROUND,将Intent标识为来自后台的操作,而不是用户的交互行为。

  (3)Service在规定时间内没有完成启动(前台Service为20s,后台Service为200s)。

  (4)ContentProvider的publish在10s内没有完成。

 

posted @   宋者为王  阅读(1549)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示