概述
1.在安卓上,如果你的APP有一段时间响应不够灵敏,系统就会向用户显示一个对话框,这个对话框称之为应用程序无响应(ANR)对话框。
如果开发手机上出现这种问题,可以通过查看/data/anr/traces.txt来获取导致ANR的信息,最开始部分为最新信息。
一般导致ANR的原因有:
1.主线程被IO操作阻塞;
2.主线程存在耗时计算;
3.主线程中错误的操作,比如Thread.wait或者Thread.sleep等安卓系统会监视应用程序的响应情况,一旦出现下面两种情况,就会弹出ANR对话框。
4.应用程序5秒内没有响应用户的输入事件;
5.BroadcastReceiver未在10秒内完成相关处理;
6.Service无法在20秒内完成处理。
解决办法:
1.使用AsyncTask处理耗时IO操作;
2.设置主线程和子线程的优先级,因为默认子线程和主线程优先级相同。
3.使用Handler处理子线程结果,而不是使用Thread.wait()和Thread.sleep()来阻塞主线程。
4.Activity的onCreate()和onResume()回调尽量避免耗时的代码, BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。
总之,所以耗时操作都要在子线程里面完成,在通过Handler,AsyncTask等方式更新UI。无论如何都要保证用户界面的流畅度。
2.Activity和Fragment的生命周期
参考文章:https://juejin.im/post/5e5c5e306fb9a07cbe346d71
最后
以上就是追寻悟空为你收集整理的什么是ANR,如何避免它的全部内容,希望文章能够帮你解决什么是ANR,如何避免它所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复