Android上的异常处理和生命周期?

问题描述:

我想学习和Android的测试例外,似乎无法 获取信息过去的try/catch,Thread.currentThread()。setUncaughtExceptionHandler(新MyExceptionHandler())和ACRA。Android上的异常处理和生命周期?

基本上我想知道抛出Exception时会发生什么,它是否只会杀死当前活动?如果我的应用程序有多个活动并且它在活动堆栈中的第四个活动中被杀死了,它会干掉它吗?

我问,主要是因为我抛出一个错误,它不是杀死完整的程序,但在程序的某个中间活动重新启动它。 (我这样做的目的是为了更多地了解它)我宁愿程序死亡,也不愿意在某种不良状态下重新启动,但 Android没有杀死开关(至少我知道)。

感谢

编辑:Android是否重新创建堆栈,我们知道它会走多远?或者如果它使用创建?或恢复?如果堆栈中以前的活动需要用户输入会怎么样?

我已经从logcat中观察到的是Android的排序缓存的意图,并试图重新构建你的筹码从这些。我的意思是说,你的活动堆栈包括活动A,B,C,D(顶部D,底部A),并在活动D中抛出异常。然后操作系统尝试通过触发A的意图来重建堆栈,然后B,然后C.但我不知道这件事

+0

由于在传统的桌面意义上没有应用程序,这种行为(如果它是正确的)将是非常合乎逻辑的。如果有一组几乎独立的活动,那么当一个活动爆炸时,整套设备不需要可怕地死亡。这将类似于单个桌面应用程序降低整个系统。 – erichamion 2011-03-24 15:11:13

+0

我的问题是,在重建堆栈的过程中,它丢失了一些东西,并且它错误地重新创建了它。 (它不重新加载数据库) – Totic 2011-03-24 18:00:17

+0

我相信,在重新创建活动时,会调用onCreate方法。是否有可能您的活动创建依赖于某些先前可用的数据,但在崩溃后不存在。我的意思是,早些时候我曾经将一个数据结构作为静态变量存储在单例类中,并用它来创建我的活动。在崩溃之后,我看到有时数据结构不适用于我的活动,并且它被正确渲染 – pankajagarwal 2011-03-25 04:39:32

我的印象一直是Android框架打印出从捕获的异常堆栈跟踪然后重新启动虚拟机的一切,但导致异常的活动。例如,在活动和背景粘滞服务运行中,我有一个未捕获的空指针异常。 Android试图重新启动虚拟机并重新启动粘性服务,但我错误地实现了该服务,以便始终查看启动它的意图,在重新启动时为NULL,从而导致第二个异常。

此外,至少在埃克莱尔以上,Android将尝试重新启动某些崩溃之后的服务,诸如在onStartCommand未捕获的异常()。在这种情况下,将使用标志START_FLAG_RETRY调用onStartCommand()。

一些洞察到这是在这里:http://groups.google.com/group/android-developers/msg/0eb714f48d534443

Android有没有杀死开关

你可以尝试System.exit(INT),从Java SE,它可以杀死虚拟机。

如果android重新创建堆栈,我们知道它是否使用create?或恢复?

的onCreate被调用(见http://developer.android.com/images/activity_lifecycle.png

顺便说一句,一个异常并杀死该程序,但ActivityManager重新启动它。 如果以前的活动需要用户输入,前置Activity依赖于它,则应将其放入放入Intent的Bundle中,后者将启动前置Activity,因为系统在重新启动时会保存Bundle并将其再次传递给Activity 。