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