你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS 無限後台運行

IOS 無限後台運行

編輯:IOS開發綜合

根據蘋果文檔中關於後台執行的描述,任何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];

}



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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved