Android ---都有哪些情况会发生anr,怎么解决?

Android发生ANR的情况主要包括输入调度超时、广播超时、服务超时等,解决ANR问题的方法包括避免在主线程进行耗时操作、导出ANR日志信息、分析系统资源信息、查看主线程状态等。‌

Android系统中,ANR(Application Not Responding)是一种自我保护措施,当主线程出现卡顿时,系统会给用户一个弹出提示,让用户选择继续等待或强制关闭应用。ANR的发生通常与以下几种情况有关:

  • 输入调度超时‌

    如果应用在5秒内未响应输入事件(如按键或屏幕触摸),就会发生ANR。这通常是由于主线程上的问题导致的,如主线程上的阻塞操作或长时间等待获取锁。为了避免这种情况,应避免在主线程上执行阻塞操作或长时间运行的操作,并尽量减少主线程与其他线程之间的锁争用。

  • 广播超时‌

    如果BroadcastReceiver的onReceive()方法执行时间超过规定阈值(通常是10秒),也会触发ANR。解决这一问题的方法包括优化广播接收器的逻辑,确保其执行时间在可接受范围内。

  • 服务超时‌

    如果应用声明的服务无法在规定时间内完成Service.onCreate()和Service.onStartCommand()/Service.onBind()执行,或者Context.startForegroundService()在前台启动新服务但该服务在5秒内未调用startForeground(),则会发生ANR。解决这一问题需要确保服务的启动和绑定操作尽快完成,或者将服务转换为前台服务时及时调用startForeground()。

解决ANR问题的方法包括:

  • 导出ANR日志信息‌:当ANR发生时,系统会收集相关日志信息,包括CPU使用情况、线程执行情况等,这些信息可以帮助定位问题原因。
  • 分析系统资源信息‌:关注CPU、内存、IO等系统资源的使用情况,这些信息有助于判断ANR是否由系统资源争抢导致。
  • 查看主线程状态‌:检查主线程是否存在耗时、死锁、等待锁等问题,这些问题可能导致ANR。
    ‌结合应用日志、代码或源码分析‌:通过查看应用日志和代码,可以分析ANR问题发生前应用是否有异常,从而找到具体问题所在。

综上所述,解决Android的ANR问题需要从避免在主线程进行耗时操作、优化代码逻辑、及时处理系统资源争抢等多个方面入手,同时通过导出和分析ANR日志信息来定位和解决问

相关推荐
fatiaozhang952725 分钟前
咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包
android·电视盒子·av1·机顶盒rom·魔百盒刷机
_小马快跑_1 小时前
玩转 ImageView.ScaleType:图片的缩放与裁剪技巧
android
Lei活在当下1 小时前
【现代 Android APP 架构】02. UI 层的职责与具体实现
android·架构·android jetpack
_一条咸鱼_1 小时前
揭秘 Android 高级工程师面试秘籍:从源码到实战全方位剖析
android·面试·android jetpack
_一条咸鱼_1 小时前
深度揭秘!从源码级剖析 Android 基础知识体系
android·面试·android jetpack
_小马快跑_1 小时前
Android Studio | 使用Database Inspector 查看数据库 .db 文件,太方便了!
android
snwrking1 小时前
[targetSDK升级为35] 恶心的EdgeToEdge适配
android
QING6181 小时前
AndroidManifest.xml中application标签属性详解 —— 新手指南
android·app·trae
恋猫de小郭2 小时前
Flutter Widget IDE 预览新进展,开始推进落地发布
android·前端·flutter
百锦再4 小时前
Java与Kotlin在Android开发中的全面对比分析
android·java·google·kotlin·app·效率·趋势