1

我正在使用一个由从服务器获取的数据提供支持的应用程序。获取逻辑相当健壮且容错;大多数连接错误都会自动重试,通常效果很好。但是,在极少数情况下(包括涉及网络延迟和后端数据库的竞争条件),应用程序/服务器可能会进入无法恢复的不一致状态。

我想做的是让应用程序在这种状态下,只需在用户下次按下主页按钮时终止(而不是进入后台)。该应用程序在重新启动时将与服务器重新同步,用户将按照他/她的快乐方式行事。

我的第一个想法是在检测到不一致状态时从 applicationDidEnterBackground 调用 exit() 。有没有人有这种事情的经验或知道另一种有条件地禁用后台的方法?我知道这是不受欢迎的,有没有人有苹果通过检测 exit() 的使用明确拒绝应用程序的经验?UIApplicationExitsOnSuspend = YES 不是一个选项,因为多任务处理需要在其他 99.999% 的时间按预期工作。

注意:对于缺乏细节,我深表歉意。理想的解决方案是想出一种从不一致状态中恢复的方法;相信我,当我说花了很多时间和精力来想办法做到这一点时。

4

1 回答 1

2

根据他们的技术问答 QA1561exit(),Apple 非常不鼓励使用:

警告:可以通过调用 exit 退出应用程序。调用 exit 的应用程序将在用户看来已经崩溃,而不是执行正常终止并动画返回主屏幕。这种用法会带来负面体验,强烈建议不要这样做。

使用exit()应该显示为崩溃,就像断言失败一样。如果审阅者在测试您的应用程序时遇到这种情况,那么它很可能会被拒绝。

但是,如果这是一个非常罕见的情况,您可以掷骰子并希望审阅者永远不会遇到它。这是一场赌博,你也许可以侥幸逃脱,但我不知道这是否是最好的进攻计划。

如果您能识别出这种不一致,我就无法理解为什么您不能像重新启动应用程序那样擦除所有内存存储并有效地从头开始。我有一个罕见的情况,我的核心数据数据库会由于撤消/重做/撤消循环而变得不一致,这就是我从中恢复的方法。

于 2010-12-31T22:14:55.350 回答