Android中的ANR和崩溃有什么区别?

use*_*740 38 android

我在互联网上搜索了ANR是什么.我也研究了这些参考文献.但我没有得到有关Android崩溃的详细信息.

有人能告诉我ANR(Android没有响应)和Android崩溃之间的区别吗?

Boa*_*rdy 93

ANR代表 pplication Ñ OT ř esponding.

如果您在UI线程上运行进程需要很长时间(通常是大约5秒),则会发生ANR.在此期间,GUI(图形用户界面)将锁定,这将导致用户按下的任何内容都不会被操作.在大约发生5秒之后,如果线程仍未恢复,则会显示ANR对话框,通知用户应用程序没有响应,并且会让用户选择等待,希望应用程序能够最终恢复,或强制关闭应用程序.

崩溃是指应用程序中的异常被抛出但尚未处理.例如,如果您尝试设置EditText组件的文本,但是EditText为null并且没有try catch语句来捕获应用程序崩溃并将强制关闭的异常.用户不会看到导致崩溃的原因,他们将看到一个对话框,告诉他应用程序意外关闭了力量,并为他们提供发送错误报告的选项.在此示例中,如果您要查看错误报告,您将看到由此引起的错误java.lang.NullPointerException.

希望这可以帮助.


Sha*_*yaz 12

ANR( pplication ñ OT [R esponding)是由于处理long running task in Main Thread(UI线程).如果主线程停止超过5秒,你会得到ANR.

崩溃是由exception and errorNullpoint,classNotfound,类型转换,解析错误等引起的.ANR也会导致应用程序崩溃.

注意:永远不要在UI线程上运行长时间运行的任务

参考ANR


zee*_*ali 9

ANR和崩溃示例:

这个问题已经有了一个公认的答案,但是我添加了两个简单的例子来更好地理解ANR和Crash.

ANR:

// this will produce an ANR on your app
int i = 0;
while(true) {
    i++;
}
Run Code Online (Sandbox Code Playgroud)

崩溃:

// this will crash your app : will produce java.lang.ArithmeticException
int value = 5, i = 0;
int result = value / i;
Run Code Online (Sandbox Code Playgroud)