我的应用程序支持后台位置更新(特别是重要的位置监控).
当我确定应用程序在后台(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任务,因为它会知道它处于后台状态?
解决方法
您可以忽略这些并让操作系统处理它,只要小心,如果您有长时间运行的BG任务,它们可能有也可能没有时间完成,所以最好小心,因为它不允许您永远运行任务.