一、概念
二、出现场景
ANR出现场景:
主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
主线程中存在耗时的计算
主线程中错误的操作,比如Thread.wait或者Thread.sleep等
Android系统会监控程序的响应状况,一旦出现下面情况,则弹出ANR对话框
Force close出现场景(一般是异常情况):
比如空指针、数组越界、类型转换异常等等。
捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。
ANR,程序没有响应,有可能程序会再次响应
例子:
应用运行时,Main线程进行了耗时操作
应用运行时,用户操作过于频繁
Force close:程序抛出异常,会强制退出
例子:
应用运行时抛出了OutOfMemoryError, 应用运行时抛出了RuntimeException
二、出现场景
ANR出现场景:
主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
主线程中存在耗时的计算
主线程中错误的操作,比如Thread.wait或者Thread.sleep等
Android系统会监控程序的响应状况,一旦出现下面情况,则弹出ANR对话框
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。超出就会提示应用程序无响应(ANR:Application Not Responding)对话框。
三种常见类型
1: KeyDispatchTimeout(5 seconds) -- 主要类型
按键或触摸事件在特定时间内无响应
2 : BroadcastTimeout(10 seconds)
BroadcastReceiver在特定时间内无法处理完成
3: ServiceTimeout(20 seconds) -- 小概率类型
Service在特定的时间内无法处理完成
Force close出现场景(一般是异常情况):
比如空指针、数组越界、类型转换异常等等。
捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。