ANR异常问题

1.什么是ANR
Application Not Responsing应用程序无响应的对话框,在主线程做了耗时的操作,activity处理不能操过5s,BroadcastReceiver处理不能操过10s。
2.造成ANR的主要原因
【ANR异常问题】触发者:应用程序的响应是由Activity Manager和WindowManager系统服务监视的,检测到了就会触发对话框。
主要原因:io密集型和计算密集型任务放到了主线程
1.主线程被IO操作(从android4.0开始,网络IO不允许放在主线程)阻塞。
2.主线程中存在耗时计算。
3.子线程可以通过handler机制,通知主线程处理来解决。
3.有哪些操作在主线程

1.Activity的生命周期的回调。
2.Service默认是在主线程。
3.BroadcastReceiver的onReceiver。
4.没有使用自子线程的looper的Handler的HandleMessage,post(Runnable)在主线程。
5.AsyncTask的回调,除了doInBackground,其他的都是在主线程。
4.如何解决ANR
1.在AsyncTask处理耗时IO操作。
2.使用Thread或者是HandlerThread(里面自带了handler,可以在子线程通过handler发送消息到消息队列)提高优先级。如果不提高优先级,他的优先级和主线程一样,还是会出现ANR。
3.使用handler处理工作线程的耗时任务。
4.在Activity的onCreate和onResume里面尽量不做耗时操作。

    推荐阅读