我正在使用计时器,我试图让它在后台运行。在模拟器上这很好但是在我的设备上(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
}
}
答案 0 :(得分:0)
不是只打印可能从不同线程执行的输出,而是从主线程打印输出。这就是为什么你会看到延迟的原因:
DispatchQueue.main.async {
print(rows[j]["time"])
}
答案 1 :(得分:0)
您的计时器间隔太短。定时器的分辨率为50-100 ms,因此您的间隔(10 ms)无法如此快速地执行。我认为当你的应用程序在后台时,这种效果会增加。