什么是ANR?网络
Application Not Respondingoop
形成ANR的主要缘由:post
应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在Activity中主线程点击超过5秒木有响应或者是在广播UI线程里超过10秒木有响应则会致使ANR。下面具体列举一下:spa
- 主线程被I/O操做(从4.0以后网络IO不容许在主线程中)阻塞。
- 主线程中存在耗时的计算。
形成ANR的主要缘由:Android中哪些操做是在主线程呢?线程
- Activity的全部生命周期回调都是执行在主线程的。
- Service默认就是执行在主线程的。
- BroadcastReceiver的onReceive回调是执行在主线程的。
- 没有使用子线程的looper的Handler的handleMessage,post(Runnable)是执行在主线程的。
- AsyncTask的回调中除了doInBackground,其余都是执行在主线程。
如何解决ANR:生命周期
- 使用Asynctask处理耗时IO操做。
- 使用Thread或者HandlerThread提升优先级。
- 使用Handler来处理工做线程的耗时任务。
- Activity的onCreate()和onResume()回调中尽可能避免耗时的代码。