【发布时间】:2013-03-15 01:21:52
【问题描述】:
如果应用程序上次意外关闭,我想在应用程序启动时做一些事情。(崩溃,强制关闭),我怎么知道?
【问题讨论】:
-
我写了这个答案来区分崩溃和强制关闭:stackoverflow.com/a/17711034/1804403
标签: ios
如果应用程序上次意外关闭,我想在应用程序启动时做一些事情。(崩溃,强制关闭),我怎么知道?
【问题讨论】:
标签: ios
我通过在应用启动时和应用进入前台时在 NSUserDefaults 中将 BOOL 设置为 YES 来做到这一点。
当应用进入后台时,我将这个相同的值设置为NO。
在didFinishLaunchingWithOptions 的开头(在将标志设置为YES 之前),我检查标志当前是否设置为YES。如果是YES,那么我知道应用程序不干净地崩溃了。
但是,这不会检查应用程序是否在后台被杀死(由操作系统或用户)。
您可以通过在应用进入后台时设置标志并在应用进入前台时清除标志来处理在后台(由操作系统或用户)强制关闭。然后在didFinishLaunchingWithOptions 方法中检查这个标志。如果设置了这个标志,那么你就知道你的应用在后台被杀死了。
请记住,在后台强制关闭不应被视为“意外关闭”。这实际上是相当预期的。
【讨论】:
是的,您可以这样做:最简单的方法是在<Application_Home>/Documents/ 目录中创建一个具有已知名称的文件,然后在“正常”退出时删除该文件。如果文件在启动时就在那里,您就知道之前的退出不是“正常”退出。
您可以定期更新文件的内容,每分钟在计时器上写入当前时间戳。这样就可以知道异常退出的大概时间。
【讨论】:
applicationDidEnterBackground:。或者,如果应用不支持后台处理,则在 applicationWillTerminate: 方法中。
我将发布此内容以供将来参考:
对于额外的覆盖检查活动状态
然后使用 nsuserdefaults 来跟踪状态
后台检查的主要区别在于,当应用程序仍在前台执行时,当用户通过应用程序切换器立即关闭应用程序时,它们会覆盖边缘情况。我认为这也有助于后台兼容的应用程序
我认为它可能会在碰撞和强制关闭之间为您提供更多的覆盖范围......虽然我还没有测试过电池耗尽
【讨论】: