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日志信息来定位和解决问

相关推荐
Jouzzy33 分钟前
【Android安全】Ubuntu 16.04安装GDB和GEF
android·ubuntu·gdb
极客先躯1 小时前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
Good_tea_h4 小时前
Android中的单例模式
android·单例模式
计算机源码社8 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
丶白泽9 小时前
重修设计模式-结构型-门面模式
android
晨春计10 小时前
【git】
android·linux·git
标标大人11 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
竹林海中敲代码11 小时前
Qt安卓开发连接手机调试(红米K60为例)
android·qt·智能手机
木鬼与槐12 小时前
MySQL高阶1783-大满贯数量
android·数据库·mysql
iofomo12 小时前
【Abyss】Android 平台应用级系统调用拦截框架
android·开发工具·移动端