android 崩溃原因,ANR和Android中的崩溃之间有什么区别?

我在互联网上搜索了什么是ANR。 我也研究了这些参考资料。 但是我没有关于Android崩溃的详细信息。

有人可以告诉我ANR(Android无法响应)与Android崩溃之间的区别吗?

ANR代表应用程序无响应。

如果您在UI线程上运行一个过程很长时间(通常大约5秒钟),则会发生ANR。在此期间,GUI(图形用户界面)将锁定,这将导致用户按动的任何操作都不起作用。大约5秒钟后,如果线程仍未恢复,则会显示一个ANR对话框,通知用户该应用程序没有响应,并将为用户提供等待的选择,希望该应用程序能够最终恢复,或强制关闭应用程序。

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

希望这可以帮助。

如果您通过JNI运行C ++代码并在其中遇到错误,则应用程序进程将完全崩溃,而用户不会看到对话框。 至少过去。

ANR(Application Not Responding)是由于处理long running task in Main Thread(UI线程)引起的。如果主线程停止了5秒钟以上,您将得到ANR。

崩溃是由于exception and error之类的Nullpoint,classNotfound,typecast,parse错误等引起的。ANR也导致应用程序崩溃。

注意:切勿在UI线程上运行长时间运行的任务

参考ANR

为什么会发生崩溃?

@ user3035740现在检查ans

是否可以在我的设备中找到与ANR相关的信息?

如果您遇到崩溃,可以始终找到它logcat trace

永远不要在UI线程中运行长时间运行的任务...

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;

应用程序无响应(ANR):

ANR将在以下情况下显示:

在5秒内对输入事件的响应(例如按键或均匀触摸屏幕)。

广播接收器尚未在10秒内执行完毕。

如何避免ANR?

为长时间运行的操作(例如数据库操作,网络操作等)创建另一个工作线程。

增强响应能力:

在android应用中,通常100到200毫秒是阈值,超过此阈值,用户会觉得该应用运行缓慢。以下是一些技巧,通过这些技巧我们可以显示应用程序的响应速度。

每当您进行任何后台工作且用户正在等待响应时,都将显示"显示进度"对话框。

特别是对于游戏,请计算辅助线程中的移动。

如果您的应用程序具有耗时的初始设置,则显示初始屏幕。

崩溃:

崩溃是应用程序无法处理的情况,它将强制关闭我们的应用程序。崩溃的一些示例如Nullpointer异常,非法状态异常等。

ANR代表应用程序无响应,这意味着您的应用程序不再在UI线程上注册事件,因为在那里执行了长时间运行的操作

ANR代表应用程序无响应。

发生这种情况的原因有很多,例如应用程序是否阻止了UI线程上的某些I / O操作,因此系统无法处理传入的用户输入事件。也许应用程序花费太多时间来构建精致的内存结构或计算UI线程中的下一步。

阻塞主线程不会导致崩溃,但是会显示一个弹出窗口,让用户在5秒钟后将其杀死。

但是对于崩溃,主要原因是人为错误。

应用程序崩溃的大部分时间是由于人为的编码/设计错误

人为错误

缺乏测试

空指针异常

记不清

范例:

当程序员引用一个不存在的对象或变量时,这很常见,基本上会产生一个空指针错误。

如果连接不良,这也可能会使您的应用崩溃。该应用程序还可能存在内存管理问题。

请查看我的答案以了解可能导致崩溃的android特定异常的类型。

Android特定异常

ANR代表"应用程序无响应",当长时间在主线程中进行操作时会发生……

崩溃是由于异常和错误(例如Nullpoint,

ANR也由以下原因引起:

在5秒钟内没有响应输入事件(例如按键或屏幕触摸事件)。

BroadcastReceiver在10秒内尚未完成执行。

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

ANR:基本上是由于主线程上的任务长时间运行。

诊断ANR时,需要寻找一些常见的模式:

该应用程序正在执行涉及主线程上I / O的慢速操作。

该应用程序正在主线程上进行长时间的计算。

主线程正在对另一个进程进行同步联编程序调用,而另一个进程要花很长时间才能返回。

主线程被阻塞,等待另一个线程上正在进行的长时间操作的同步块。

主线程与另一个线程处于死锁状态,无论是在您的进程中还是通过绑定程序调用。主线程不仅等待长时间的操作完成,而且处于死锁状态。

以下技术可以帮助您找出导致ANR的原因是哪些。

崩溃:

崩溃的原因可能很多。一些原因很明显,例如检查一个空值或空字符串,但另一些原因则更微妙,例如将无效参数传递给API甚至复杂的多线程交互

[ANR和崩溃有所不同] [1]

Android应用程序通常默认情况下完全在单个线程上运行,即" UI线程"或

"主线程"。这意味着您的应用程序在UI线程中需要很长时间才能完成的所有操作都可能触发ANR对话框,因为您的应用程序没有给自己机会来处理输入事件或意图广播。

ANR for ex:如果您正在ui线程中下载大量数据,则会出现其他一些可能性,例如内存不足等。它可能会导致android崩溃,我们不能说两者都是相同的

因此崩溃不同于ANR。对吗?

是的,ANR不会在所有情况下都崩溃。

在哪里可以找到ANR相关信息?

developer.android.com/training/articles/perf-anr.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值