ANR是什么?怎样避免和解决ANR

发布于 2020-01-11 22:52:40
关注者
0
被浏览
5986
1 个回答
  • 面试哥
    面试哥 2020-01-11
    为面试而生,有面试问题,就找面试哥。

    Application Not Responding,即应用无响应

    出现的原因有三种: a)KeyDispatchTimeout(5 seconds)主要类型按键或触摸事件在特定时间内无响应 b)BroadcastTimeout(10 seconds)BoradcastReceiver在特定的时间内无法处理 c)ServiceTimeout(20 seconds)小概率类型Service在特定的时间内无法处理完成

    避免ANR最核心的一点就是在主线程减少耗时操作。通常需要从那个以下几个方案下手: a)使用子线程处理耗时IO操作 b)降低子线程优先级,使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同 c)使用Handler处理子线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程 d)Activity的onCreate和onResume回调中尽量避免耗时的代码 e)BroadcastReceiver中onReceiver代码也要尽量减少耗时操作,建议使用intentService处理。intentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看