7

我的应用程序支持后台位置更新(特别是具有重要的位置监控)。

当我确定应用程序处于后台 ( application.applicationState == UIApplicationStateBackground) 时,是否需要阻止 UI(通过控制器等)加载?

我的目的是避免在后台加载繁重的 UI(这是一个大应用程序),这可能会浪费我在后台实际响应位置更新的所有有限时间。

例如(在 ObjC 中,但问题也是针对 Swift 的),假设我有一些RootViewController初始化并保存整个控制器/视图层次结构,我应该viewDidLoad这样做:

if ([UIApplication sharedApplication].applicationState ==  UIApplicationStateBackground) {
    // Root view controller loaded while in background, so doing only background stuff
    [self justDoBackgroundStuffWithoutUI];
} else {
    // Root view controller loaded normally, so loading normal UI
    [self initializeUIAndChildControllers];
}

? 还是我应该“信任”iOS 忽略所有这些 UI 任务,因为它会知道它处于后台状态?

4

2 回答 2

4

您可以忽略这些并让操作系统来处理,如果您有长时间运行的 BG 任务,请小心,它们可能有时间完成,也可能没有时间完成,因此最好非常小心,因为它不会让您永远运行任务。

于 2017-01-05T11:44:05.260 回答
1

在后台更新 UI 是不必要的、混乱的和低效的。

  • 不必要的,因为对于不使用该应用程序的用户没有附加价值。viewWillAppear 中的简单操作就足够了。
  • 令人困惑,因为用户可能希望在屏幕出现时看到自己的变化,我不知道您的应用程序,但这更像是一种商业选择。也许您在显示 gmail/whatsapp 等更改的方式上有类似的东西,并且您希望用户看到的电子邮件/消息。
  • 效率低下,因为您只是过早地做一些消耗电池的事情。您甚至说“繁重的 UI 加载”。如果位置一次又一次地改变会发生什么?是否可以在不再需要更改的意义上覆盖更改,或者无论如何您将始终需要更改。

总结一下:我并不是说不要进行任何 UI 更新,每个应用程序都有一个甜蜜点。很可能您不需要执行其中的大部分操作,并且延迟加载更改,即在加载屏幕时似乎是更好的方法。虽然我确信有一些我不知道的高级指南。希望其他答案会出现。

于 2017-01-05T12:05:45.937 回答