【问题标题】:Background api call without freezing user interface后台api调用不冻结用户界面
【发布时间】:2017-10-13 09:58:42
【问题描述】:

我想在后台以 10 分钟的时间间隔连续调用一个 api,而不会中断用户界面和同一应用内的其他 api 调用。

就像 api 每 10 分钟会在后端数据库中永久更新我的位置一样,但这个 api 不会中断 UI 和另一个在我使用应用程序时会被调用的 api。

【问题讨论】:

  • 使用后台线程或 GCD 或 NSOperationQueue,但您的初学者最好阅读有关这些的任何教程。
  • 已经有很多话题了,发帖前请谷歌(搜索相同的查询)。
  • 我希望在不中断其他 api 和用户界面调用的情况下调用 api(从应用程序启动后每 10 分钟调用一次)。不像进入后台然后回来更新 api,我希望该 api 一直在后台被调用,直到我关闭应用程序。

标签: ios objective-c multithreading nsurlsession


【解决方案1】:

您应该在不同的线程中运行代码(在 iOS 中称为队列)。 如果您阅读文档会更好。这里我可以给你看一个例子,这里我在后台下载一张图片然后上传 UI:

 if let url = imageURL{
            DispatchQueue.global(qos: .userInitiated).async { [weak self] in  //background queue
                let urlContents = try? Data(contentsOf: url)
                if let imageData = urlContents{
                    DispatchQueue.main.async {          //come back to the UI Queue to upload the UI
                        self?.image = UIImage(data: imageData)
                    }

                }
            }
        }

要了解每个参数和每种可能性,请查看文档。

【讨论】:

  • 我不希望任何关于 api 调用的 UI 更新,此 api 将每 10 分钟调用一次以更新后端数据库中的某些内容,并且其他一些 api 也会像往常一样被调用当我使用应用程序功能时。
  • Le Global 队列在后台。您创建它并将您的代码放在那里。如果您不需要 UI 更新,则不必调用 DispatchQueue.main,但逻辑是相同的。
【解决方案2】:

您可以像递归方法一样编写代码来解决您的问题。下面有一个用Objective-c编码的解决方案

- (void)myRepetitiveMethod {

   dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
                                               double delayInSeconds = 600;
                                               dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
                                               dispatch_after(popTime, q_background, ^(void){
//do something                                                   
[self myRepetitiveMethod];
                                               });
}

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多