IOS 無限後臺運行 – iPhone手機開發技術文章 iPhone軟體開發教學課程

根據蘋果文檔中關於後臺執行的描述,任何app都有10分鐘左右的後臺任務執行時間。 10分鐘後,app會被iOS強行掛起。

但是,有5類app允許有“無限的”後臺運行時間:

1. Audio。

2. Location/GPS。

3. VoIP。

4. Newsstand。

5. Exernal Accessory 。

你可以將任何app聲明為上述5種類型以獲得無限的後臺運行時間,但當你提交app到App Store時,蘋果會審查你的app,一旦發現你“濫用”瞭後臺API,你的app將被拒絕。

當然,對於企業開發而言,不存在“濫用”的問題——企業app可以通過OTA部署,不經過蘋果商店審查。

在企業部署中,你可以將一個app聲明為VoIP,但這個程序根本和VoIP無關,我們的目的隻是為瞭讓iOS給我們無限後臺執行的權限。聲明過程是在app的Info.plist文件中加入以下key:

UIBackgroundModes

voip

我測試瞭以下代碼:

定義一個:

@implementation AppDelegate
{
UIBackgroundTaskIdentifier bgTask;

NSUInteger counter;
}

– (void)backgroundHandler {

NSLog(@”### –>backgroundinghandler”);

UIApplication*
app = [UIApplicationsharedApplication];

bgTask = [app
beginBackgroundTaskWithExpirationHandler:^{

[app endBackgroundTask:bgTask];

bgTask =
UIBackgroundTaskInvalid;

}];

// Start the long-running task

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0), ^{

while (1) {

NSLog(@”counter:%ld”,
counter++);

sleep(1);

}

});

}

– (void)applicationDidEnterBackground:(UIApplication *)application

{

BOOL backgroundAccepted = [[UIApplicationsharedApplication]
setKeepAliveTimeout:600
handler:^{ [selfbackgroundHandler]; }];

if (backgroundAccepted)

{

NSLog(@”backgrounding accepted”);

}

[selfbackgroundHandler];

}

此方法經測試不是很穩定,而且頻繁進入退出會加快後臺方法執行的次數,希望大神有更好方法

發佈留言