Android面试系列文章2018之异常处理ANR异常篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ClAndEllen/article/details/79381399

Android面试系列文章2018之异常处理ANR异常篇

1.什么是ANR?

  ANR(Application Not Responding):程序无响应。会造成ANR弹框。

2.造成ANR的主要原因

  a.主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。

  b.主线程存在耗时的操作。

  那么Android系统中哪些操作在主线程(UI线程)?

  (1)Activity的所有生命周期都是执行在主线程的。/5s–>ANR

  (2)Service默认是执行在主线程的。/5s–>ANR

  (3)BroadcastReceiver的onReceiver回调是执行在主线程的/10s–>ANR

  (4)没有使用子线程的Looper的Handler的handleMessage,post(Runnable)是执行在主线程。

  (5)AsyncTask的回调除了doInBackground,其他都是在主线程。

3.如何解决ANR?

[1]使用AsyncTask处理耗时操作。
[2]使用Thread或HandlerThread提高优先级。
[3]使用Handler来处理工作线程的耗时任务。
[4]Activity的onCreate()和onResume()回调函数中尽量避免耗时操作。

没有更多推荐了,返回首页