一 . ANR : Application Not Responding
应用程序的响应性是由Activity Manager和 WindowManager系统服务监视的,当监视到在一定时间内无法完成时就会报ANR.
二 .那些操作是在主线程里面进行的:
- Activity的所有生命周期回调都是执行在主线程的.
- Service默认是执行在主线程的.
BroadcastReceiver的onReceive回调是执行在主线程的.
没有使用子线程的looper的Handler的HandleMessage, post(Runnable)是执行在主线程的.
AsyncTask的回调中除了doInBackground,其他都是执行在主线程中.
三 .如何避免ANR
使用AsyncTask处理耗时的IO操作.
使用Thread或者HandlerThread提供优先级.
使用handler来处理工作线程的耗时任务,在子线程里面处理完后发消息给UI现在进行更新UI
Activity的onCreate和onResume回调中尽量避免耗时的代码.