当App崩溃时会发生什么?

我正在开发一个Android应用程序,正如所料,有些情况下,我的代码崩溃(错误,空指针等)。

当应用程序崩溃时,它会重新启动,即使我没有写任何代码来执行它(我想这是默认行为?!),但问题是,应用程序以不正确的状态打开。

这是应用程序启动时通常会发生的情况:

  • 最初,应用程序以“启animation面”打开。 此屏幕将尝试使用共享首选项中的持久性令牌对用户进行身份validation,并从服务器加载一些默认值并将其保留在某些服务中。
  • 取决于login成功,它可以进入主屏幕或login屏幕。

当应用程序正常启动时,它一切正常,初始化序列按预期执行,但是当由于崩溃而重新启动时,将会在启animation面片段中填充的值(例如login用户或从服务器加载默认值)都是无效的,这意味着它们从不被执行。

这导致我相信应用程序重新启动时的事件顺序是完全错误的,即不是使用正确的活动(在清单中指定为启动器)重新启动应用程序,而是错误地重新启动事件并从错误的活动开始。

所以下面是一个问题:什么决定了我的应用程序应该在发生崩溃时自行重启,以及决定如何启动的应用程序? 当应用程序从崩溃启动时,是否有任何事件可以捕获,以便可以覆盖初始化序列? 有没有办法强制应用程序总是从启动器的活动开始?

提前谢谢了,

Solutions Collecting From Web of "当App崩溃时会发生什么?"

当活动重新启动时,由于崩溃,如果运行前台活动的进程消失,如果系统没有有效的保存状态,系统将丢弃该活动(通常意味着系统暂停并给系统暂停之前的onSaveInstanceState的结果)。 一旦系统决定是否放弃该活动,它将恢复堆栈顶部的任何活动。 如果这是你的活动之一,或者因为你有另一个坠毁的人,或者坠毁的那个人是某种程度上的沉默的暂停状态,那么系统会再次启动你的过程来显示最高的活动。 您可以尝试在AndroidManifest主要活动(启动器活动)声明中设置clearTaskOnLaunch="true" ,对于除主要活动之外的其他活动,可以尝试设置android:finishOnTaskLaunch ="true" ,并查看是否可以防止应用程序在崩溃后的其他状态下重新启动。 另一种方法是检查你的活动在哪里重新开始,然后在起点检查这个活动是否有所有需要的数据。 如果没有全部所需的数据,则redirect到启动器活动。 希望这可以帮助。