(二十四)ANR异常面试问题

一、什么是ANR

ANR是Application Not Responding(程序未响应),系统回弹出对话框让用户进行等待或者关闭程序。一个Activity执行时间超过5s,一个Service执行时间超过10s,都会出现ANR。

二、造成ANR的主要原因

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

2.主线程中存在耗时的计算。

Android中的哪些操作是在主线程呢?

1.Activity的所有生命周期都是执行在主线程的。

2.Service默认是执行在主线程的。

3.BroadcastReceiver的onReceive回调是执行在主线程的。

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

5.AsyncTask的回调方法除了doInBackground,其他都是执行在主线程。

三、如何解决ANR

1.使用AsyncTask处理耗时IO操作。

2.使用Thread或者HandlerThread提高优先级。

3.使用Handler来处理工作线程的耗时任务。

4.Activity的onCreate和onResume回调中尽量避免耗时的代码。

你可能感兴趣的:((二十四)ANR异常面试问题)