我正在开发一个Android应用程序,正如预期的那样,有些情况下我的代码崩溃了(bug,空指针等)。当应用程序崩溃时会发生什么?
当应用程序崩溃时,它会重新启动自身,即使我没有编写任何代码来执行它(我想这是默认行为?!),但问题是,应用程序以不正确的状态打开。
这里是当应用程序启动时什么一般情况:
- 最初,该应用程序带有“闪屏”打开。该屏幕尝试使用共享首选项中的持久性令牌对用户进行身份验证,并从服务器加载一些默认值并将其保留在某些服务中。
- 根据登录成功,它会转到主屏幕或登录屏幕。
当应用程序正常启动,这一切工作正常,并如预期的那样执行初始化序列但是当它重新启动作为碰撞的结果,将已经填充在启动画面片段中的值(例如作为登录用户或从服务器加载默认值)都是无效的,这意味着它们从不执行。
这使我相信,应用程序重新启动时的事件序列是完全错误的,即不是使用正确的活动重新启动应用程序,而是在清单中指定为启动器,它似乎会错误地重新启动事物并从错误的活动。
所以,这里的问题是:什么决定了我的应用程序应该在发生崩溃时自行重启,以及决定应该如何启动?当应用程序从崩溃中启动时,是否有任何事件可以捕获,以便我可以覆盖初始化序列?有没有办法强制应用始终从启动器活动开始?
提前许多感谢,
只是添加一些信息,你可以通过调用:android.os.Process.killProcess(android.os.Process.myPid())来防止再次打开应用程序。 System.exit(0) 在全局Thread.UncaughtExceptionHanlder中。我不知道这是多么正确(可能不多)。但我真的很想知道应用程序在这些场景中应该如何表现 – JML 2014-11-04 19:32:25
非常感谢JML。这确实有帮助;不过,我应该提及,我并不特别介意重新启动应用程序,我希望尽可能保持与Android生态系统的“标准方式”接近,这似乎是操作系统自动重新启动应用程序。然而,我希望它在通过尊重启动器标志重新启动时运行正确,或者至少让我能够覆盖初始化序列。再次,非常感谢您的建议。 – kha 2014-11-04 19:36:09