我正在和计时器一起工作,我试着让它在后台工作。在模拟器上,这个工作很好,但是在我的设备(iOS 11)上它非常慢:1秒变成5或6秒.
这是我在后台运行应用程序的代码:
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
}
}发布于 2017-10-09 08:28:58
不只是打印输出(可能从不同的线程执行),而是从主线程打印输出。这就是为什么你可能会看到延迟:
DispatchQueue.main.async {
print(rows[j]["time"])
}发布于 2017-10-09 08:37:36
你的计时器间隔太短了。定时器的分辨率为50-100毫秒,所以你的间隔(10毫秒)不能执行得这么快。我认为当你的应用程序在后台时,这种效果会增加。
https://stackoverflow.com/questions/46640798
复制相似问题