ANR

application not responding

一、什么是ANR?

应用程序无响应的对话框(主线程耗时操作)

二、ANR产生的主要原因

1.主线程做了耗时的IO操作(Android4.0以上网络io不允许在主线程中,会直接报异常)阻塞

2.主线程做耗时操作


5秒内无法响应用户的输入时间(activity,service)

broadcastreceiver10秒钟无法结束


Android中哪些操作在主线程中?

1.activity所有生命周期

2.service默认执行在主线程

3.broadcastreceiver的onreceive回调

4.没有使用子线程的looper的handler的handlemessage,post(runnable) 关联主线程的looper

5.asynctask的回调除了doinbackground,其他都执行在主线程。

三、解决ANR

1.使用asynctask中处理耗时操作 IO

2.使用thread或handlerthread提高优先级( handlerthread可以在子线程中创建handler发送消息,内部创建了looper关联了消息队列)

3.使用handler处理工作线程中的耗时任务(handler子线程灵活地发送消息给主线程)

4.Activity的onCreate和onResume回调中尽量避免耗时操作

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

推荐阅读更多精彩内容