iOS 4 開始已經能夠支援多工,應用程式在關閉時會退到背景 Background 繼續執行,並不會完全關閉,從程式的觀點來說,早期應用程式在關閉時會觸發 applicationWillTerminate: 該函式用來結束並釋放應用程式所佔用的資源;而在系統安裝 iOS 4 之後則是觸發另一個函式 applicationDidEnterBackground: 給予應用程式短暫的時間(約莫 5 sec)來保存當前狀態並進入暫停狀態 Suspend Mode,不過這些應用程式並不會永久保存在背景,因為當系統遭遇記憶體不足的情況時,這些應用程式將會被優先考慮釋放資源供系統使用。
iOS 4 支援多工,但是並不是所有 Device 安裝 iOS 4 就可以使用背景執行,下列程式碼可以幫助您判斷目前所使用的 Device 是否支援多工。
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
backgroundSupported = device.multitaskingSupported;
}
上述程式碼可以從 backgroundSupported 所取得的 BOOL 形態參數得知該 Device 是否支援多工。
有些應用程式即使在退到背景之後仍然可以繼續執行,例如電話、導航或是音樂等,這些程式並不會進入先前所說的暫停狀態,反而能與其他應用程式同步執行,如果要製作此類的應用程式可以參考 iOS 官方文件的 UIBackgroundModes,並從 Info.plist 中的 Required background modes 設定,參數形態為字串陣列的 audio、voip、location 參數值。
在應用程式執行中也可以透過下列程式碼來獲得執行的狀態。
UIApplication *app = [UIApplication sharedApplication];
UIApplicationState appState = [app applicaitonState];
或是透過以下程式碼來取得還剩下多少時間進入 background 的 suspended 狀態。
UIApplication *app = [UIApplication sharedApplication];
NSTimeInterval bgTime = [app backgroundTimeRemaining];
沒有留言:
張貼留言