BATJ30道经典常见Android 高级面试题及答案( 九 )

2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成

3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成

为什么会超时:事件没有机会处理 & 事件处理超时

怎么避免ANR

ANR的关键

是处理超时 , 所以应该避免在UI线程 , BroadcastReceiver 还有service主线程中 , 处理复杂的逻辑和计算

而交给work thread操作 。

1)避免在activity里面做耗时操作 , oncreate & onresume

2)避免在onReceiver里面做过多操作

3)避免在Intent Receiver里启动一个Activity , 因为它会创建一个新的画面 , 并从当前用户正在运行的程序上抢夺焦点 。

4)尽量使用handler来处理UI thread & workthread的交互 。

推荐阅读