Android|ANR的种类

一、ANR是什么?

ANR全称Application Not Responding即应用程序无响应。在Android中如果应用程序有一段时间无法响应用户操作,系统会弹出弹窗,让用户选择是继续等待还是强制关闭程序。一款良好应用APP是不应该出现这个弹窗的。

二、ANR的产生原因

ANR产生原因和类型有以下几种:

1、Activity在5秒钟之内无法响应屏幕触摸事件或键盘输入事件就会产生ANR。

KeyDispatchTimeout

Reason:Input event dispatching timed out

2、BroadcastReceiver在10秒钟之内还未执行完成就会产生ANR。

BroadcastTimeout

Reason:Timeout of broadcast BroadcastRecord

3、Service各个生命周期在20秒钟之内没有执行完成就会产生ANR。

ServiceTimeout

Reason:Timeout executing service

4、ContentProvider在10秒钟之内没有执行完成就会产生ANR。

ContentProviderTimeout

Reason:timeout publishing content providers

在以上这几种原因中出现最多的一般是第一种,而且往往都是因为在写代码时不注意,在主线程做了耗时的操作。

三、在Activity的onCreate方法里调用sleep方法或者说做耗时操作,不一定会产生ANR。

其实从ANR本身意为应用程序没有响应,耗时操作本身是不会产生ANR的,导致ANR的根本还是应用程序无法在一定时间内响应用户的操作。

所以若主线程被耗时操作占用了,主线成程无法对下一个操作进行响应才会ANR,没有需要响应的操作自然就不会产生ANR,或者应该这样说:主线程做耗时操作,非常容易引发ANR。

引用链接:https://www.jianshu.com/p/7b0e8b4fa65d

你可能感兴趣的:(Android|ANR的种类)