1

我发现即使您的应用程序在最多 10 分钟内处于后台模式(最小化),iOS 也可以运行进程,并且要解决这个问题并使其永远运行,这是必要的:

需要定期下载和处理新内容的应用

这就是使用 NSURLSession API 向我的服务器发出请求的原因:

-(void)SendFiles{
...
    NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

            if(error == nil){
            [self performSelector:@selector(SendFiles) withObject:nil afterDelay:3600.0];
            }

            }];

        [dataTask resume];

}

我们中的一些人知道即使在应用程序最小化的情况下也要运行进程,我们应该使用一些标签,但是如果您使用 API NSURLSession 就不再需要这种东西了,对吧?

在我的项目中,他需要每 1 小时在我的服务器上发出一次这样的请求,为此我在 block completionHandler 中添加了一个代码:每 1 小时调用一次执行发送命令文件到服务器。

我的问题是:10分钟的时间会影响选择器延迟3600秒吗?导致我的应用程序完全关闭,我无法将文件发送到服务器?

4

1 回答 1

2

几个想法:

  1. 在 iOS 7 中,十分钟的窗口缩短为三分钟。

  2. beginBackgroundTaskWithName如果您使用(或在 iOS 7 之前)请求它,您只会获得该窗口beginBackgroundTaskWithExpirationHandler。请参阅iOS 应用程序编程指南的执行有限长度任务部分。

    请注意,我相信无论您运行连接到 Xcode 调试器的应用程序,这种后台状态行为都会发生变化,因此请确保在实际设备上进行测试,并直接从设备运行应用程序,而不是通过 Xcode。

  3. 是的,这段有限的时间会影响您拨打performSelector:afterDelay:3600.0 的延迟时间。

  4. 如果您想让应用程序定期向服务器询问数据,您现在可以使用“后台获取”。请参阅应用程序编程指南中的机会主义地获取少量内容。这旨在轮询服务器以查看是否有要下载的数据。

    您只有 30 秒的时间来执行此请求。您也无法控制这些请求的时间(尽管您是否报告是否有可用数据可能会影响后续请求的时间)。

于 2015-02-16T19:07:02.860 回答