[Android稳定性] Android App ANR原理简单梳理(基于O)

一.ANR的种类

1.1 ANR定义

Application Not Responding:即应用无响应
如果应用程序主线程在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现ANR
(主线程在特定的时间内没有做完特定的事情)

1.2.ANR类型

1) KeyDispatchTimeout :

主要类型按键或触摸事件,input事件在5S内没有处理完成发生ANR,关键Log:Reason: Input dispatching timed out xxxx

2)ServiceTimeout

Service主线程处理耗时,前台Service在20s内,后台Service在200s内没有处理完成发生ANR,关键Log:Timeout executing service:/executing service XXX

3)BroadcastTimeout

前台广播在10S内,后台广播在60s内没有被所有接收器处理完成发生ANR,关键Log:Timeout of broadcast XXX/Receiver during timeout:XXX/Broadcast of XXX

4)ProcessContentProviderPublishTimedOutLocked

ContentProvider publish在10s内没有处理完成发生ANR,关键log:timeout publishing content providers

1.3.常见的原因

A.主线程耗时操作,如复杂的layout,庞大的for循环,IO等。
B.主线程被子线程同步锁block
C.主线程被Binder 对端block
D.Binder被占满导致主线程无法和SystemServer通信
E.得不到系统资源(CPU/RAM/IO)

二.ANR的原理简化

2.0 ANR dialog显示过程

这里写图片描述

2.1 KeyDispatchTimeout

InpuntManagerService会起两个线程InputReader线程和InputDispatcherThread,InputDispatcherThread线程会由reader线程wake,起来后就threadloop不断循环读取input事件。
这里写图片描述

2.2 ServiceTimeout

这里写图片描述

2.3 BroadcastTimeout

这里写图片描述

2.4 ContentProvider PublishTimedout

这里写图片描述

三.总结

附上上面使用draw.io绘制的流程图原稿以及下面详细流程图的uml文件:
https://pan.baidu.com/s/1tp0Gc2GZQXNysut9hkejIA
anr_simplify.xml 是上面的流程图原稿,使用draw.io导入即可
uml文件使用安装plantuml插件的intellij或AndroidStudio打开即可
如有问题或需要提醒自己注意的读者可自行添加

详细过程:
1.ANR dialog显示过程
这里写图片描述
2.InputDispatch timeout
这里写图片描述

3.Service timeout
这里写图片描述
4.Broadcast timeout
这里写图片描述
5.ContentProvider publish timeout
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 稳定性是指 Android 系统和应用程序在长时间运行、多任务切换、设备资源管理、异常处理等方面的表现。在 Android 应用开发过程中,开发人员需要考虑应用程序的稳定性,以确保应用程序能够正常运行并且不会出现闪退、ANR 等问题。 Android 应用稳定性分析包括以下几个方面: 1. 异常捕获和处理:开发人员需要使用 try-catch 语句或者其他异常处理机制来捕获应用程序中可能出现的异常,以避免应用程序因为异常而崩溃。 2. 内存泄漏检测:开发人员需要使用内存分析工具来检测应用程序中是否存在内存泄漏情况,以及及时释放不再使用的对象,避免内存溢出等问题。 3. 资源管理:开发人员需要合理管理应用程序所使用的资源,例如图片、音频、视频等,防止因资源浪费而导致应用程序运行缓慢或崩溃。 4. 处理线程和进程:开发人员需要合理地管理应用程序中的线程和进程,避免线程阻塞或死锁等问题,以及避免因为进程占用资源过多而导致系统崩溃。 5. 兼容性测试:开发人员需要对应用程序在不同设备、不同 Android 版本、不同网络环境等条件下进行充分的测试,以确保应用程序能够在各种环境下正常运行。 总之,Android 应用稳定性分析是保障应用程序正常运行的重要措施,开发人员需要在开发过程中充分考虑应用程序的稳定性,并使用各种工具和技术来检测和解决可能存在的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值