我正在使用由服务器提取的数据提供支持的应用。提取逻辑相当强大且容错;大多数连接错误都会自动重试,这通常很有效。但是,鉴于非常罕见的情况(包括涉及网络延迟和后端数据库的竞争条件),app / server可能会进入无法恢复的不一致状态。
我想做的是让应用程序在此状态下,只需在用户下次按下主页按钮时终止(而不是转到后台)。该应用程序在重新启动时将与服务器重新同步,用户将以他/她的快乐方式进行。
我的第一个想法是在检测到不一致状态时从applicationDidEnterBackground调用exit()。 是否有人对此类事情有任何经验或知道在条件基础上禁用后台处理的其他方法?我理解这是不赞成的,有没有人有过Apple通过检测exit()的使用明确拒绝app的经验? UIApplicationExitsOnSuspend = YES不是一个选项,因为多任务需要按预期工作其他99.999%时间。
注意:我对缺乏具体细节表示歉意。理想的解决方案是提出一种从不一致状态中恢复的方法;相信我,当我说很多时间和努力已经找到了解决方法时。
答案 0 :(得分:2)
Apple强烈建议不要Technical Q&A QA1561使用exit()
:
警告:可以退出 应用程序通过调用exit。 将出现应用程序调用退出 让用户崩溃,而不是 而不是执行优雅的终止 并动画回到主屏幕。 这种用法提供了消极的 经验和强烈 气馁。
exit()
的使用应该显示为崩溃,就像断言失败一样。如果评审人员在测试您的申请时遇到这种情况,可能会被拒绝。
然而,如果这是一个非常罕见的情况,你可以掷骰子,并希望审稿人永远不会遇到它。这是一场赌博,你也许可以逃脱,但我不知道这是否是最好的攻击计划。
如果你能识别出这种不一致,我就看不出为什么你不能擦除所有的内存存储并从头开始有效地启动,就像你在应用程序的全新启动时那样。我有一个罕见的情况,我的核心数据数据库由于撤消/重做/撤消循环而变得不一致,这就是我从中恢复的原因。