背景中的计时器非常慢

时间:2017-10-09 07:23:11

标签: ios swift

我正在使用计时器,我试图让它在后台运行。在模拟器上这很好但是在我的设备上(iOS 11)它很慢:1个seconde变成5或6个secondes ......

  

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

backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(
    expirationHandler:
      {UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!)}
    )
  

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

我怎样才能使它有效?

编辑:

这是我的计时器代码:

timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, 
  selector:#selector(ViewController.updateTimer), userInfo: nil, repeats: true)

编辑2:

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
    }
}

2 个答案:

答案 0 :(得分:0)

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

DispatchQueue.main.async {
  print(rows[j]["time"])
}

答案 1 :(得分:0)

您的计时器间隔太短。定时器的分辨率为50-100 ms,因此您的间隔(10 ms)无法如此快速地执行。我认为当你的应用程序在后台时,这种效果会增加。

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