我在互联网上搜索了ANR是什么。我也研究了这些参考文献。但我没有得到有关Android崩溃的详细信息。
有人能告诉我ANR(Android无响应)和Android崩溃之间的区别吗?
答案 0 :(得分:87)
ANR代表 A 应用 N ot R 。
如果您在UI线程上运行一个需要很长时间(通常约为5秒)的进程,则会发生ANR。在此期间,GUI(图形用户界面)将锁定,这将导致用户按下的任何内容都不会被操作。在大约发生5秒后,如果线程仍未恢复,则会显示ANR对话框,通知用户应用程序没有响应,并且会让用户选择等待,希望应用程序能够最终恢复,或强制关闭应用程序。
崩溃是指应用程序中的异常被抛出但尚未处理。例如,如果您尝试设置EditText
组件的文本,但EditText
为空且没有try catch语句来捕获应用程序崩溃并将强制关闭的异常。用户不会看到导致崩溃的原因,他们将看到一个对话框,告诉他应用程序意外关闭了力量,并为他们提供发送错误报告的选项。在此示例中,如果您要查看错误报告,您将看到由java.lang.NullPointerException
引起的错误。
希望这会有所帮助。
答案 1 :(得分:12)
ANR ( A 应用 N R 响应)是由于处理long running task in Main Thread
( UI线程)。如果主线程停止超过5秒,你会得到ANR。
崩溃归因于exception and error
,如Nullpoint,classNotfound,类型转换,解析错误等.ANR也会导致应用程序崩溃。
注意:永远不要在UI线程上运行长时间运行的任务
参考ANR
答案 2 :(得分:8)
ANR和崩溃示例:
这个问题已经有了一个可以接受的答案,但是我添加了两个简单的例子来更好地理解ANR和Crash。
<强> ANR 强>
// this will produce an ANR on your app
int i = 0;
while(true) {
i++;
}
<强>崩溃:强>
// this will crash your app : will produce java.lang.ArithmeticException
int value = 5, i = 0;
int result = value / i;
答案 3 :(得分:2)
ANR代表Application Not Responding,这意味着您的应用程序不再在UI线程上注册事件,因为在那里执行了长时间运行的操作
答案 4 :(得分:1)
ANR: It is called when anything your application is doing in the UI thread that
takes a long time to complete (5 sec approx)
参考:ANR
Crash: It is called when your Application gets some Error or Exception raised by the DVM
答案 5 :(得分:1)
ANR也由 -
引起答案 6 :(得分:1)
ANR代表应用无响应,当长线操作发生在主线程中时,它就会发生......
崩溃是由于异常和错误造成的,如Nullpoint,
答案 7 :(得分:1)
应用无响应(ANR):
ANR将在以下条件中显示:
在5秒内响应输入事件(例如按键或屏幕触摸)
广播接收器尚未在10秒内完成执行。
如何避免ANR?
为长时间运行的操作(如数据库操作,网络操作等)创建不同的工作线程。
加强响应能力: 在Android应用程序中,通常100到200毫秒是用户会觉得应用程序运行缓慢的阈值。以下是我们可以使应用程序更具响应性的提示。
在您进行任何后台工作并且用户正在等待响应时显示进度对话框。
具体来说,对于游戏中的移动进行计算。
<强>崩溃:强> 崩溃是未处理的条件进入应用程序,它将强制关闭我们的应用程序。一些崩溃的例子就像Nullpointer异常,非法状态异常等。
答案 8 :(得分:1)
ANR代表应用程序无响应。
可能由于许多原因而发生,例如,如果应用程序阻止UI线程上的某些I / O操作,则系统无法处理传入的用户输入事件。或许应用程序花费太多时间构建精心设计的内存结构或计算UI线程中的下一步。
阻止主线程,不会导致崩溃,但会显示一个弹出窗口,让用户在5秒后杀死该应用。
但是对于崩溃,主要原因是人为错误。 大多数情况下,应用程序崩溃是因为人类编码/设计错误
人为错误
缺乏测试
空指针异常
出现OutofMemory
示例:
当程序员引用不存在的对象或变量时,这很常见,基本上会产生空指针错误。
如果连接错误,也可能导致应用崩溃。该应用程序也可能存在内存管理问题。
请参阅我的答案,了解可能导致崩溃的特定于Android的异常类型。
答案 9 :(得分:0)
ANR for ex:如果你正在ui线程中下载大量数据,其他可能性如内存不足等等它会来......可能它会导致android崩溃,我们不能说两者都是一样的跟随其他< / p>
答案 10 :(得分:0)
[ANR和Crash Different] [1] Android应用程序通常完全在单个线程上运行,默认情况下为“UI线程”或 “主线”。这意味着您的应用程序在UI线程中执行的任何操作都需要很长时间才能完成,因为您的应用程序没有给自己处理输入事件或意图广播的机会。
答案 11 :(得分:0)
ANR:基本上是由于主线程上的长时间运行任务。
诊断ANR时需要寻找一些常见的模式:
以下技巧可以帮助您找出导致ANR的原因。
<强> CRASH:强>
崩溃的原因可能很多。一些原因是显而易见的,比如检查空值或空字符串,但其他原因更为微妙,例如将无效参数传递给API或甚至复杂的多线程交互
答案 12 :(得分:0)
这是开发人员门户网站上的好文章。 它提供了有关ANR的详细信息。 https://developer.android.com/training/articles/perf-anr.html