3

如果应用程序上次意外关闭,我想在应用程序启动时做一些事情。(崩溃,强制关闭),我怎么知道?

4

3 回答 3

7

我通过在应用启动时和应用进入前台时在 NSUserDefaults 中设置 aBOOL来做到这一点。YES

NO我在应用程序进入后台时设置了相同的值。

在开始时didFinishLaunchingWithOptions(在将标志设置为 YES 之前),我检查标志当前是否设置为YES. 如果是YES,那么我知道该应用程序不干净地崩溃了。

但是,这不会检查应用程序是否在后台被杀死(由操作系统或用户)。

您可以通过在应用程序进入后台时设置标志并在应用程序进入前台时清除标志来在后台(由操作系统或用户)处理强制关闭。然后在方法中检查这个标志didFinishLaunchingWithOptions。如果设置了这个标志,那么你就知道你的应用程序在后台被杀死了。

请记住,在后台强制关闭不应真正被视为“意外关闭”。其实挺期待的。

于 2013-03-15T01:29:16.407 回答
3

是的,您可以这样做:最简单的方法是在目录中创建一个具有已知名称的<Application_Home>/Documents/文件,然后在“正常”退出时删除该文件。如果文件在启动时就在那里,您就知道之前的退出不是“正常”退出。

您可以定期更新文件的内容,每分钟在计时器上写入当前时间戳。这样您就可以大致了解异常退出发生的时间。

于 2013-03-15T01:27:24.260 回答
2

我将发布此内容以供将来参考:

对于额外的覆盖检查活动状态

  • (void)applicationDidBecomeActive:(UIApplication *)application
  • (void)applicationWillResignActive:(UIApplication *)application

然后使用 nsuserdefaults 跟踪状态

后台检查的主要区别在于,当应用程序仍在前台执行时,当用户通过应用程序切换器立即关闭应用程序时,这些检查覆盖了边缘情况。我认为这也有助于后台兼容的应用程序

我认为它可能会给你更多的覆盖范围之间的碰撞和力量关闭这些......虽然我还没有测试过电池耗尽

于 2014-10-09T18:14:28.713 回答