首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >iOS后台获取任务问题:太不频繁&锁定时不工作

iOS后台获取任务问题:太不频繁&锁定时不工作
EN

Stack Overflow用户
提问于 2014-05-26 09:28:17
回答 2查看 820关注 0票数 1

在带有iOS 7和更高版本的设备上,我们需要我们的应用程序来使用后台获取iOS API。我们需要这样做,因为我们的服务器还不能实现推送通知。为此,我做了以下工作:

  1. 将背景提取最小时间间隔设置为1 Min。 [ setMinimumBackgroundFetchInterval:TIMEINTRVAL_DIFFERANCE_IN_BACKGROUND_FETCH];UIApplication sharedApplication ]
  2. 使用NSURLSession代码实现委托方法来下载映像。 -(UIApplication*)应用程序performFetchWithCompletionHandler:(void UIApplication{NSLog(@“后台提取开始.”);UILocalNotification *notification = [UILocalNotification allocinit];notification:@“Background”;[UIApplication sharedApplication presentLocalNotificationNow:notification];// 1 NSString *imageUrl = @"http://www.spotonsoft.com/images/logo.png";// 2 NSURLSessionConfiguration *sessionConfig = NSURLSessionConfiguration defaultSessionConfiguration;// 3 NSURLSession *session = NSURLSession sessionWithConfiguration:sessionConfig委托:(Id)self delegateQueue:nil;NSURLSessionDownloadTask *getImageTask =[会话下载URLWithString:NSURLSession:imageUrl];getImageTask简历;NSLog(@@“后台获取已完成的.”);} -(void)URLSession:(NSURLSession *)会话downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)位置{NSURLSession}
  3. 在"info.plist“中设置后台获取模式。

意见:-

  1. 调用后台提取,我可以在日志中看到它。然而,两个电话之间的平均持续时间太长了。很多次10-15分钟。
  2. 只有当电话未被锁定时,才会打电话。

我们可能做错什么了吗?请与背景提取任务API (如果有的话)分享您的经验。

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 15:34:56

系统根据用户的行为唤醒应用程序,目的是在用户启动应用程序之前触发背景提取。例如,如果用户总是在下午1点使用应用程序,系统就会学习和调整,在使用期间之前执行获取。

(http://www.objc.io/issue-5/multitasking.html)

完全可以预期,在背景取取之间会看到10-15分钟的间隔。

您可以通过选择Debug -> Simulate Background Fetch从Xcode的菜单栏(同时调试)触发后台提取。

票数 2
EN

Stack Overflow用户

发布于 2014-05-26 10:15:58

使用以下代码在app后台状态下执行某些代码:

代码语言:javascript
代码运行次数:0
运行
复制
UIApplication *app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    }];
// Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.

        if (connectedToNetwork) {
            // do work son...
        }

        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23866941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档