所以这是我面临的问题。我正在构建的应用程序的某些部分打开一些c网络套接字,允许连接到各种服务器/服务。但是,如果应用程序进入休眠状态,这些套接字连接将丢失,并在尝试重新加载时出错。所以我想要做的是基本上在应用程序再次启动时通知用户,需要重新启动应用程序。主要的问题是,我可以使用退出(0)来杀死应用程序的按钮,而不会让我的应用程序被拒绝吗?
Apple说用户应该控制应用程序何时被杀,在这种情况下我看到它们是,但我不确定Apple对此的看法。有没有人用过这个?你被拒绝了吗?提前感谢任何建议!修改
谢谢大家的意见。我正在努力考虑所有因素,但由于应用程序需要尽快提交,我只需要知道,如果我们无法获得另一种解决方案,如果上述提议的解决方案将被拒绝。
答案 0 :(得分:4)
当重大事件影响应用程序的生命周期时,您的应用程序代理会收到通知。您应该尝试停止网络操作,然后在应用程序生命周期中的适当时间自动恢复它们,而不是要求您的用户重新创建会话。
当应用程序准备通过应用程序委托中的回调退出或进入后台时,您可以在任意数量的地方优雅地终止网络套接字(以及其他内容):
applicationWillResignActive:
applicationWillEnterBackground:
applicationWillTerminate:
可能在以下位置重建套接字:
applicationDidBecomeActive
applicationWillEnterForeground
答案 1 :(得分:3)
您是否尝试过不允许该应用在后台运行?然后,只要用户退出主屏幕,它就会被杀死。这可能有点激进,但可以解决问题。从Apple退出后台执行:
"如果您不希望您的应用程序在后台保留 它退出,您可以明确选择退出后台执行 通过将UIApplicationExitsOnSuspend键添加到您的模型 应用程序的Info.plist文件并将其值设置为YES。
当应用程序选择退出时,它会在未运行之间循环, 不活动和活动状态,永远不会进入后台或 暂停国家。
当用户点击主页按钮退出应用程序时, applicationWillTerminate:调用应用程序委托的方法 并且应用程序有大约五秒的时间来清理和清理 在终止并退回到未运行状态之前退出。"
另请参阅:How to prevent my app from running in the background on the iPhone
答案 2 :(得分:1)
文档非常明确,"没有为优雅地终止iOS应用程序提供API。"请参阅Technical Q&A QA1561 How do I programmatically quit my iOS application?。
说实话,终止应用程序以清理套接字就像通过强制应用程序退出而不是调用release
来处理内存管理一样。
答案 3 :(得分:0)
如何调出模态视图控制器告诉用户退出应用程序?您可以在没有任何关闭按钮的情况下创建此视图控制器,因此用户有义务终止该应用程序。