首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后台计时器速度非常慢。

后台计时器速度非常慢。
EN

Stack Overflow用户
提问于 2017-10-09 07:23:10
回答 2查看 823关注 0票数 0

我正在和计时器一起工作,我试着让它在后台工作。在模拟器上,这个工作很好,但是在我的设备(iOS 11)上它非常慢:1秒变成5或6秒.

这是我在后台运行应用程序的代码:

代码语言:javascript
复制
backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(
    expirationHandler:
      {UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!)}
    )

Info.plist:应用程序不会在后台运行:否

我怎样才能让它起作用?

编辑:

这是我的计时器代码:

代码语言:javascript
复制
timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, 
  selector:#selector(ViewController.updateTimer), userInfo: nil, repeats: true)

编辑2:

代码语言:javascript
复制
func updateTimer () {
    var j = 0
    for _ in rows {
        if (rows[j]["Playing"] as! Bool == true ) {
            rows[j]["time"] = (rows[j]["time"] as! Double + 0.01) as AnyObject
        // print(rows[j]["time"]) - PRINT OUTPUT HERE
            rows[j]["lastTime"] = (rows[j]["lastTime"] as! Double + 0.01) as AnyObject
        }
        if (rows[j]["lastTime"] as! Double > 60.0) {
            min[j] += 1
            rows[j]["lastTime"] = 0.00 as AnyObject
        }
        j += 1
    }
}
EN

回答 2

Stack Overflow用户

发布于 2017-10-09 08:28:58

不只是打印输出(可能从不同的线程执行),而是从主线程打印输出。这就是为什么你可能会看到延迟:

代码语言:javascript
复制
DispatchQueue.main.async {
  print(rows[j]["time"])
}
票数 0
EN

Stack Overflow用户

发布于 2017-10-09 08:37:36

你的计时器间隔太短了。定时器的分辨率为50-100毫秒,所以你的间隔(10毫秒)不能执行得这么快。我认为当你的应用程序在后台时,这种效果会增加。

看看这个答案:https://stackoverflow.com/a/30983444/5613280

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46640798

复制
相关文章

相似问题

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