RuntimeException导致ANR而不是在android

时间:2015-07-02 09:15:11

标签: android crash crash-reports

我在两种情况下都得到了ANR:

throw new NullPointerException("random null pointer");

while(true){}

仅在异常部分VM实际关闭(D / AndroidRuntime:关闭VM)。

第二个问题是:如何强制app崩溃而不是ANR并在logcat中获取堆栈跟踪?

更新 改变了标题ANR和Crash之间的区别。

更新 它发生在大约3-4个月前。从那以后,只有找到崩溃的方法就是无处不在地把try catch盒子放到任何地方。

5 个答案:

答案 0 :(得分:5)

我遇到同样的问题,当我调试时,我到达代码“throw RuntimeException”但我也有ANR。

我唯一的线索是,当我在我的应用中配置Google Analytics时,它就开始发生了。这是你的情况,@ Alpha?

我没有超越,因为我有点像这样处理它,但有一天我将专门为这个问题进行分析调试。

编辑: 该问题已在Google Play Services 8.4中解决。我们终于可以报告未被捕获的异常! 该应用程序似乎被阻止了几秒钟,但最终抛出异常并报告没有ANR。

答案 1 :(得分:2)

崩溃:应用程序已停止,因为它抛出了未经检查的异常,因此JVM停止。

ANR :您的应用程序停止响应,这意味着UI线程被昂贵或长时间操作阻止。例如,在UI线程上执行while(true){}

我认为您无法捕获触发ANR对话框的系统内置机制,因此您可能会抛出RuntimeException并导致应用程序崩溃。我不确定你为什么要这样做,尝试遵循指南here会更好,这样你就可以避免ANR和崩溃。

答案 2 :(得分:0)

App Crash / Force Close

http://www.quora.com/What-causes-Android-apps-to-force-close

  

如果应用耗尽了太多内存或处理能力,应用就会   被迫关闭(崩溃)。确保不确定的最好方法   碰巧就是编写非常有效的代码而不会使用很多代码   记忆,并不断测试你的应用程序的各种   设备(主要是较旧的设备,因为它们具有较少的RAM和   处理能力)。原因也是例外。

<强> ANR

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

答案 3 :(得分:0)

更改默认异常处理程序时遇到此问题。在我的情况下,我在捕获异常时遇到了NullPointerException,这导致了一个导致ANR的循环。

与注释中提到的@Fighter42一样,它可以出现在任何覆盖默认异常行为的库中。

希望这有帮助!

答案 4 :(得分:0)

我现在正在使用Google Play服务8.4并且未捕获的异常不再导致ANR。我已经使用了一段时间,在早期版本中也可以。

现在的结果是,当存在未捕获的异常时,UI不会响应几秒钟,但最终会抛出异常并在Google Analytics中报告。