Swift - 后台获取和延迟

Posted

技术标签:

【中文标题】Swift - 后台获取和延迟【英文标题】:Swift - Background Fetch and Delay 【发布时间】:2017-06-12 08:56:00 【问题描述】:

我在我的应用中实现了后台获取功能。

后台获取调用的函数包含一个延迟函数。

但是这个函数似乎没有触发:

let when = DispatchTime.now() + 2 
DispatchQueue.main.asyncAfter(deadline: when) 
    MyFunction()

它似乎在我唤醒应用程序后立即触发。

为什么这不会在后台获取时触发?

【问题讨论】:

如果这应该是延迟等待某事已经完成,不要那样做。 预期结果是什么?等待(延迟)然后执行MyFunction() 还是相反? 哦,是的,我应该提到我知道这是一种糟糕的做法,但在我的情况下仍然足够好 :) @AhmadF 是的,等待 x 秒然后执行 MyFunction 是预期的结果。 【参考方案1】:

试试这个代码:

   DispatchQueue.global().async 
        let timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(self.MyFunction), userInfo: nil, repeats: false)
        RunLoop.current.add(timer, forMode: .defaultRunLoopMode)
        RunLoop.current.run()
    

【讨论】:

【参考方案2】:

我认为您不能在主队列的后台运行。试试这个(将main 更改为global()):

let when = DispatchTime.now() + 2 
DispatchQueue.global().asyncAfter(deadline: when) 
    MyFunction()

【讨论】:

以上是关于Swift - 后台获取和延迟的主要内容,如果未能解决你的问题,请参考以下文章

swift延迟后如何更新UI

在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误

延迟后在后台线程中处理核心数据

如何消除 animateKeyframes 动画开始和结束的延迟 - Swift UIKit

Radio Streaming AVPlayer 延迟(延迟)很高 swift 3

Swift:如何无延迟地刷新 tableview (UIRefreshControl)