2012-04-21 57 views
2

这就是我面临的问题。我正在构建的应用程序的某些部分打开了一些允许连接到各种服务器/服务的c网络套接字。但是,如果应用程序进入睡眠状态,这些套接字连接将丢失,并在尝试重新加载时出错。所以我想要做的事情基本上是在应用程序再次启动时通知用户,应用程序需要重新启动。主要问题是,我可以向他们展示一个按钮,通过使用exit(0)来杀死应用程序,而不会让我的应用程序被拒绝?根据用户要求杀死iOS应用程序

苹果公司表示,用户应该掌握应用何时被杀死,在这种情况下,我看到他们是,但我不确定苹果对此的看法。有其他人使用过吗?你被拒绝了吗?预先感谢您的任何建议!

编辑:

谢谢大家对你的建议。我正在考虑所有事情,但因为应用程序需要尽快提交,所以我只需要知道,如果我们无法获得另一个解决方案,如果上述提议的解决方案将被拒绝。

+0

您是否尝试过不允许该应用在后台运行?然后,只要用户退出主屏幕,它就会被杀死。这可能有点侵略性,但会解决问题。 – PengOne 2012-04-21 21:23:14

+0

如何让它在后台运行?这是简单的,苹果是否真的允许这个没有被拒绝? – MZimmerman6 2012-04-21 21:24:22

+1

我认为你应该看到它*需要*作为bug重新启动的事实。你真的应该能够应付去背景和回来的应用程序。 – mattjgalloway 2012-04-21 21:26:16

回答

1

该文档对此非常明确,“没有提供用于正常终止iOS应用程序的API。”见Technical Q&A QA1561 How do I programmatically quit my iOS application?

说句实话,终止一个应用程序来清理套接字就像是通过强制应用程序退出而不是调用release来处理内存管理。

+0

-1:有一个公开的一对API来优雅地终止一个应用程序,并有大量的应用程序。使用UIApplicationExitsOnSuspend plist键构建应用程序,并让应用程序向Safari发送合法且有用的URL。你的应用将被终止。 – hotpaw2 2012-04-22 02:20:25

+0

我知道这不是一个优雅的方法,它是一个时间限制问题。不要以为我很高兴我必须杀死应用程序才能清理它。 – MZimmerman6 2012-04-22 17:23:37

0

怎么样调出一个模态视图控制器告诉用户退出应用程序?你可以使这个视图控制器没有任何解雇按钮,所以用户有义务杀死该应用程序。

+0

这就是我现在正在做的,我只是不知道这是否会被拒绝的应用程序。因为这可能看起来像是崩溃,但他们推着一个叫做“杀死应用程序”的按钮。我认为这是显而易见的,但我不确定苹果的观点 – MZimmerman6 2012-04-21 21:27:36

+1

不,它不会被拒绝。 AppleGuidelines不会阻止以编程方式杀死应用程序。我正在AppStore上的其中一个应用中执行此操作。 – Niko 2012-04-22 07:13:43

3

您是否尝试过不允许该应用在后台运行?然后,只要用户退出主屏幕,它就会被杀死。这可能有点侵略性,但会解决问题。从苹果公司的后台执行的选择退出:

“如果你不想让你的应用程序仍然在后台运行 它退出,你可以明确地通过增加UIApplicationExitsOnSuspend键退出后台执行 模型你的应用 的Info.plist文件,并将其值设定为YES。

当应用程序退出,则会将不运行, 不活动,和活动状态之间的它的周期和永远不会进入背景或 悬浮状态。

当用户点击Home键退出应用程序时, applicationWillTerminate:应用程序委托的方法被称为 和应用程序有大约五秒钟,清理和 出口被终止搬回非运行前州。”

参见:How to prevent my app from running in the background on the iPhone

4

您的应用程序委托收到通知时显著事件影响的应用程序的生命。您应该尝试停止网络操作,然后在应用程序生命周期的适当时间自动恢复它们,而不是要求用户重新创建会话。

您可以优雅地在任意数量的地方杀网络套接字(除其他事项外)作为应用程序准备退出或在您的应用程序委托输入通过回调背景:

applicationWillResignActive: 
applicationWillEnterBackground: 
applicationWillTerminate: 

潜在重建中的插座:

applicationDidBecomeActive 
applicationWillEnterForeground 
+0

已经尝试过,因为某些原因,这些套接字不希望重建得当。我们认为问题在于,当应用程序进入睡眠状态时,它们实际上正在失去与WiFi网络的连接,因为当您将手机切换回3G时。当应用程序恢复时,与applicationDidBecomeActive一样,当手机再次变为活动状态时,当我们称之为重新启动时,它没有与该WiFi网络的完整连接 – MZimmerman6 2012-04-21 21:31:45

+1

因此,您说您无法拆除网络没有你的应用程序的会话被强制重新启动?我认为比强制用户重新启动更好的解决方案是尝试找出一种方法,根据需要启用和禁用网络服务。 – isaac 2012-04-21 21:38:05

+0

我们正在努力做到这一点,但遇到了一些问题,并且由于我们很快就需要此应用程序,所以有时间限制才能真正做到这一点。所以我们的失败保险只是在用户同意的情况下杀死应用程序。我只想知道苹果是否会允许这样做。 – MZimmerman6 2012-04-21 21:49:34