【问题标题】:iPhone - fast-app switching and iOS 4iPhone - 快速应用切换和 iOS 4
【发布时间】:2010-11-15 20:08:22
【问题描述】:

我正在尝试在我的 iPhone 应用中获得以下功能:

  • 在后台运行时,保持运行(无需执行任何后台工作)
  • 恢复后,应用会从中断处继续

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

我已完成以下所有操作:

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

我正在使用 MonoTouch,但它可能跑题了。当然,我可以在 Obj-C 中得到答案。

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

我有什么遗漏的吗?

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

【问题讨论】:

  • 在设备上调试时,WillTerminate 在按下主页按钮后几乎立即被调用。
  • 我将把这个问题发给 MonoTouch 的人,因为一个新的简单重现应用也有同样的问题。
  • 忽略后台程序,当您从您的应用程序转到另一个应用程序时,您的应用程序是否完全回到您离开时的位置?当您在设备上通过 Xcode 运行应用程序时,当您点击设备或模拟器上的主页按钮时,调试是否停止(红色的小停止标志变灰)?您是否在支持多任务处理的设备(iPhone 3GS 和更新版本)上运行它?

标签: iphone ios4 xamarin.ios multitasking fast-app-switching


【解决方案1】:

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

【讨论】:

  • 在我的应用程序后台运行时,在屏幕上保持与用户离开的相同视图所需的最低要求是多少?
  • 如果 applicationWillResignActive 和 applicationDidResumeActive 都是空的,那应该会自动发生。
  • @Jonathan - William 是对的,您不需要让您的应用程序继续在后台积极处理事物以使其返回到您离开它的状态。只需针对 4.x SDK 构建,这应该是自动的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我不介意在终止后将应用程序恢复到以前的状态。我只想在后台执行此操作。原因是我的应用程序通常可以切换到谷歌地图等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多