ANR异常问题

1.什么是ANR

Application Not Responsing  应用程序无响应的对话框,在主线程做了耗时的操作,activity处理不能操过5s,BroadcastReceiver处理不能操过10s。

2.造成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里面尽量不做耗时操作。

你可能感兴趣的:(ANR异常问题)