ANR相关问题分析
2022/7/9 23:22:17
本文主要是介绍ANR相关问题分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是ANR
如果有一段时间程序点击不够灵敏,系统就会向用户显示一个对话框,而这个对话框的内容就是anr(Application not responding)
让用户选择等待程序继续运行,同时也可以选择关闭对话框终止程序运行
结果就是非常影响用户体验
Activity最长时间五秒
广播最长的执行时间10秒
造成ANR的主要原因
这篇文章分析了源码,ANR原理分析
简单说就是主线程做了耗时操作,无法在规定时间内完成,造成ANR
主要原因有以下两点:
一、主线程被IO操作(4.0之后网络IO不允许在主线程中运行)阻塞
二、主线程中存在耗时的计算,比如一些网络数据读取
android中的哪些操作是在主线程?
-
Activity的所有生命周期回调都是执行在主线程
-
Service默认执行在主线程
-
BroadCastReceiver的onReceive回调是执行在主线程
-
没有使用子线程的looper的Handler的handleMessage方法和post(Runnable)也是执行在主线程,很好理解
-
AsyncTask的方法里除了doInBackground,其他都是执行在主线程中
如何解决ANR
-
使用AsyncTask 处理耗时IO操作
-
使用Thread或者HandlerThread提高优先级
可以使用Thread和HandlerThread来处理耗时操作,区别是HandlerThread自带Looper,可以创建Handler发送消息 -
使用Handler处理工作线程的耗时任务
-
在Activity的onCreate和onResume方法中尽量避免耗时的代码
这篇关于ANR相关问题分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?