4

我试图在我的 iPhone 应用程序中获得以下功能:

  • 当后台运行时,保持运行(不需要做任何后台工作)
  • 恢复后,应用程序会从上次中断的地方继续

我主要希望我的应用程序上的同一个屏幕仍在运行,因为 UITabBarController 中有几个 UINavigationControllers。

我已经完成了以下所有操作:

  • 确保我使用 4.1 SDK 进行编译
  • 将 UIApplicationExitsOnSuspend 设置为 false
  • 在我的 AppDelegate 中处理 DidEnterBackground 和 WillEnterForeground
  • 在 DidEnterBackground 中调用 BeginBackgroundTask,以尝试保持我的应用程序打开

我正在使用 MonoTouch,但这可能不是重点。当然,我可以在 Obj-C 中得到答案。

我已经在带有 Backgrounder 的越狱手机上测试了我的应用程序,我看到“后台应用程序”徽章在按下主页按钮后立即消失。我还尝试在我的 Info.plist 中设置 UIBackgroundModes,但无济于事。

有什么我想念的吗?

或者这是我必须自己实现的东西才能恢复我的应用程序的先前状态?在我读过的任何地方,它都应该自动运行。

4

4 回答 4

1

我终于在 MonoTouch 的 irc 上与某人取得了联系。

在 MonoDevelop 中,有一个选项可以制作我使用的双 iPad/iPhone 项目。这导致我的应用程序在部署到设备时表现得好像与 3.2 SDK 一起运行。

我认为我的解决方案是安装刚刚发布的 iOS 4.2 SDK,因为它在 iPad 上宣传了新的多任务功能。

于 2010-12-02T14:11:27.290 回答
1

当我升级到 iOS 4.x 时,我的 MT 应用程序开始表现出这种行为,而无需我做任何事情。iOS 应该会为您处理好它。

于 2010-11-15T21:15:24.697 回答
1

如果您不想在后台工作,请不要调用 beginBackgroundTask。该调用适用于您想在后台进行某种工作的情况。如果你没有足够快地完成这项工作,iOS 将终止你的应用程序。

于 2010-11-15T20:55:27.670 回答
0

您不仅需要支持进入后台,还需要支持您的应用程序已终止的情况。在您的应用程序的初始化代码中,您应该恢复它所处的状态。例如,当您推送一个视图控制器时,用于NSUserDefaults存储当前显示屏幕的值,然后当您开始读取该值并显示关联的屏幕。

于 2010-11-15T21:39:49.207 回答