ANR异常问题
1.什么是ANR
Application Not Responsing应用程序无响应的对话框,在主线程做了耗时的操作,activity处理不能操过5s,BroadcastReceiver处理不能操过10s。
2.造成ANR的主要原因
【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里面尽量不做耗时操作。
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- jhipster|jhipster 升级无效问题
- “精神病患者”的角度问题
- 解决SpringBoot引用别的模块无法注入的问题
- Hive常见问题汇总
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 【教育故事】|【教育故事】 一个“问题学生”的蜕变
- 蓝桥杯试题
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片