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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容