2011年4月12日 星期二

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

from : http://www.furnace.idv.tw/
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 中的 UIBackgroundModes 設定,參數形態為字串陣列的 audio、voip、location 參數值。 在應用程式直行中也可以透過下列程式碼來獲得執行的狀態。 UIApplication *app = [UIApplication sharedApplication]; UIApplicationState appState = [app applicaitonState];
或是透過以下程式碼來取得還剩下多少時間進入 background 的 suspended 狀態。 UIApplication *app = [UIApplication sharedApplication]; NSTimeInterval bgTime = [app backgroundTimeRemaining];

沒有留言:

張貼留言