2017-01-05 99 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更新,每個應用都有一個甜蜜點。可能你不會需要做的大多和延遲加載的變化,即在加載屏幕似乎是更好的辦法。雖然我確信有一些我不知道的高級指導方針。希望其他答案會來。

相關問題