2017-01-05 60 views
6

我的应用程序支持后台位置更新(特别是与显著位置监控)启动。我应该避免UI时,iOS应用程序在后台

我需要防止用户界面(通过控制器等)加载,当我确定应用程序是在后台(​​)?

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

例如(在ObjC,但问题也是斯威夫特),让我们说我有一些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的任务,因为它会知道它在后台状态?

+2

您可以只相信iOS系统处理这个问题,它不会呈现在后台状态UI,这就是内置到操作系统。底层的UIKit框架将决定应用程序是否需要实际渲染。请记住,视图控制器的应用程序生命周期事件主要是响应用户交互,一旦viewDidLoad和viewDidAppear已经运行,其余的只在用户做某事时才真正运行,而当应用程序不在前台时它们不会是 – Scriptable

+0

另一种那么我认为如果我的控制器还会在他们的'viewDidLoad'上自动下载许多图像 - 我猜测,os不会被忽略。也许'UIImageView'a不会被渲染,但数据和'UIImage'确实会被加载。 – mllm

+0

在这种情况下,网络请求“应该”仍然完成,但是当应用程序退后时,任何剩余的任务只有有限的时间才能完成暂停/终止前的操作。它不会不停地运行。 – Scriptable

回答

4

可以忽略这些,让OS搞定,只是要小心,如果你有长时间运行的任务BG,他们可能会或可能不会有时间来完成,所以最好要非常小心,因为它不会让你永远运行任务。在背景

1

更新UI是不必要的和混乱的和非有效的。

  • 不必要的,因为没有附加值谁在不使用应用程序的用户。在viewWillAppear中做简单的事情就足够了。
  • 混乱,因为用户可能希望看到改变自己的画面出现了,我不知道您的应用程序,但是这更多的是一种商业选择的。也许你有显示,如Gmail/WhatsApp的变化的方式类似的东西,并且希望用户看到电子邮件/信息。
  • 无效率,因为你只是在做一些电池太早消耗。你甚至会说“沉重的UI加载”。如果地点一次又一次地变化,会发生什么?可能的变化在这个意义上被覆盖,他们不再需要或你将永远无论需要的变化。

总结:我不是说不做任何UI更新,每个应用都有一个甜蜜点。可能你不会需要做的大多和延迟加载的变化,即在加载屏幕似乎是更好的办法。虽然我确信有一些我不知道的高级指导方针。希望其他答案会来。

相关问题