iOS 无限后台运行
2019獨角獸企業重金招聘Python工程師標準>>>
根據蘋果文檔中關于后臺執行的描述,任何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:
<key>UIBackgroundModes</key>
<array>
<string>voip</string>
</array>
我測試了以下代碼:
定義一個:
@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];
}
轉載于:https://my.oschina.net/starmier/blog/195137
總結
以上是生活随笔為你收集整理的iOS 无限后台运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编码过程中的问题总结
- 下一篇: git config配置文件