【朝花夕拾】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 @ 2018-12-20 11:35  宋者为王  阅读(1422)  评论(1编辑  收藏  举报