ANR

作者: GrovessevorG | 来源:发表于2019-01-15 17:26 被阅读0次

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回调中尽量避免耗时操作

相关文章

网友评论

      本文标题:ANR

      本文链接:https://www.haomeiwen.com/subject/bdgedqtx.html