浅谈android应用之ANR

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/angelsmiling/article/details/102738068

1. 前言

由于ANR理解比较简单,这边就只以它产生原理,预防方法两个方面进行说明。

2. 产生原理

所谓ANR,即Application Not Respond的缩写,产生这个异常的最根本原因是由于UI线程阻塞时间过长,导致按键,广播,服务的事件在规定的时间内无法响应导致的。为啥我们经常会提到说不要在UI线程进行耗时操作也就是这个原因,虽然耗时操作不一定会使你的程序直接崩溃,但是这样做可能会导致ANR的问题,降低了android程序的稳定性。

3. 预防方法

我们可能会了解到ANR的产生有以下几种类型:
(1). KeyDispatchTimeout(5 seconds) --按键或触摸事件在特定时间内无响应
(2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成
(3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成

根据第二节的内容可知,其实预防ANR往简单来说也就一句话的事情:不要在UI线程进程耗时操作。
具体实现简单来说就是耗时操作新开一个线程进行,然后通过Handler这个桥梁进行线程间通信,最终实现更新UI操作。

说的比较简单,如有疑问,可在评论下方留言。

猜你喜欢

转载自blog.csdn.net/angelsmiling/article/details/102738068