From 882954ad262cdca9fdf705435fbff8f9c693f447 Mon Sep 17 00:00:00 2001 From: yicheng <11733500+yichengchen@users.noreply.github.com> Date: Wed, 9 Oct 2019 20:02:42 +0800 Subject: [PATCH] Improve: use NSBackgroundActivityScheduler instead of timer --- .../Managers/RemoteConfigManager.swift | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ClashX/General/Managers/RemoteConfigManager.swift b/ClashX/General/Managers/RemoteConfigManager.swift index 0b20057..9a1cc30 100644 --- a/ClashX/General/Managers/RemoteConfigManager.swift +++ b/ClashX/General/Managers/RemoteConfigManager.swift @@ -12,7 +12,7 @@ import Alamofire class RemoteConfigManager { var configs: [RemoteConfigModel] = [] - var autoUpateTimer: Timer? + var refreshActivity: NSBackgroundActivityScheduler? static let shared = RemoteConfigManager() @@ -47,15 +47,24 @@ class RemoteConfigManager { } func setupAutoUpdateTimer() { - autoUpateTimer?.invalidate() - autoUpateTimer = nil + refreshActivity?.invalidate() + refreshActivity = nil guard RemoteConfigManager.autoUpdateEnable else { Logger.log("autoUpdateEnable did not enable,autoUpateTimer invalidated.") return } Logger.log("set up autoUpateTimer") - let timeInterval: TimeInterval = 60 * 60 * 3 // Three hour - autoUpateTimer = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(autoUpdateCheck), userInfo: nil, repeats: true) + + + refreshActivity = NSBackgroundActivityScheduler(identifier: "com.ClashX.configupdate") + refreshActivity?.repeats = true + refreshActivity?.interval = 60 * 60 * 3 // Three hour + refreshActivity?.tolerance = 90 + + refreshActivity?.schedule() { [weak self] completionHandler in + self?.autoUpdateCheck() + completionHandler(NSBackgroundActivityScheduler.Result.finished) + } }