en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

2.23.2011

偵測 Device 是否支援多工或背景執行的方法

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];






沒有留言:

張貼留言