博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 无限后台运行
阅读量:5990 次
发布时间:2019-06-20

本文共 1321 字,大约阅读时间需要 4 分钟。

hot3.png

根据苹果文档中关于后台执行的描述,任何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 = [[UIApplicationsharedApplicationsetKeepAliveTimeout:600 handler:^{ [selfbackgroundHandler]; }];

    if (backgroundAccepted)

    {

        NSLog(@"backgrounding accepted");

    }

   

    [selfbackgroundHandler];

}

转载于:https://my.oschina.net/starmier/blog/195137

你可能感兴趣的文章
最新VIN(车辆识别码)解析
查看>>
LeetCode - 2. Add Two Numbers
查看>>
小程序横向滚动
查看>>
编写jQueryUI插件(widget)
查看>>
minix3(一)安装以及编辑文件
查看>>
C++/C union使用记一下锅
查看>>
Python集合常用的操作
查看>>
生成Xnb文件[转]
查看>>
剑指offer——面试题15.2:判断两个整数m和n的二进制中相差多少位
查看>>
[2018/11/14]操作系统
查看>>
2018/11/29 一个64位操作系统的设计与实现(环境配置)
查看>>
第四章 容器
查看>>
表格的增删改查
查看>>
poj Squares n个点,共能组成多少个正方形 二分 + 哈希
查看>>
阿里巴巴Java开发手册(详尽版)
查看>>
CSS中定义CLASS时,中间有空格和每空格的区别
查看>>
自定义博客园皮肤:暗色流体响应式布局
查看>>
几种常用递归查询
查看>>
Java面试问题——线程全面详解总结
查看>>
UML实践详细经典教程
查看>>