我正在开发一个Android应用程序,正如预期的那样,有些情况下我的代码崩溃(错误,空指针等)。
当应用程序崩溃时,它会重新启动,即使我没有编写任何代码来执行此操作(我想这是默认行为?!)但问题是,应用程序打开的状态不正确。
以下是应用启动时通常会发生的情况:
当应用程序正常启动时,一切正常并且初始化序列按预期执行,但是当它因崩溃而重新启动时,将在启动屏幕片段中填充的值(例如登录)用户或从服务器加载默认值都是无效的,这意味着它们永远不会被执行。
这让我相信应用程序重新启动时的事件序列是完全错误的,即使用正确的活动重新启动应用程序,在清单中指定为Launcher,它似乎重新启动错误并从错误的活动。
所以这就是问题:什么决定了我的应用程序应该在崩溃发生时重新启动,以及决定应该如何启动它的原因是什么?当应用程序从崩溃中启动时,我是否可以捕获任何事件,以便我可以覆盖初始化序列?有没有办法强制应用程序始终从启动器活动开始?
非常感谢,
答案 0 :(得分:3)
当一个活动重新启动时,由于崩溃,如果运行前台活动的进程消失,如果系统没有有效的保存状态,系统将丢弃该活动(通常意味着它已暂停并具有给定系统在暂停之前的onSaveInstanceState的结果)。一旦系统决定是否抛弃该活动,它将恢复现在位于堆栈顶部的任何活动。如果这是您的一项活动,要么是因为您有另一个活动落后于崩溃的那个,要么崩溃的那个以某种方式处于已确定的暂停状态,那么系统将再次启动您的流程以显示最高活动。您可以尝试在AndroidManifest主要活动(启动器活动)声明中设置clearTaskOnLaunch="true"
,在除主要活动之外的其他活动中设置android:finishOnTaskLaunch ="true"
,看看是否会阻止应用在崩溃后重新启动其他状态。另一种方法是检查您的活动重新启动的位置,然后在开始时检查此活动是否具有所有必需的数据。如果它没有所有必需的数据,则重定向到启动器活动。希望这会有所帮助。