iOSシステムのアプリ時計で、タイマーまたはストップウォッチを開始したときにアプリを終了し、終了してから、タイマーまたはストップウォッチを実行しています。バックグラウンドでタイマーを実行する
timer
をバックグラウンドで実行するにはどうすればよいですか?
アップルはどうしましたか?
iOSシステムのアプリ時計で、タイマーまたはストップウォッチを開始したときにアプリを終了し、終了してから、タイマーまたはストップウォッチを実行しています。バックグラウンドでタイマーを実行する
timer
をバックグラウンドで実行するにはどうすればよいですか?
アップルはどうしましたか?
それが可能だ。ここでは
は、アプリケーションを閉じたとき、あなたがそれを設定する方法です。このよう
:ここvar bgTask = UIBackgroundTaskIdentifier()
は、それを使用する方法である:
var bgTask = UIBackgroundTaskIdentifier()
bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
UIApplication.shared.endBackgroundTask(bgTask)
})
let timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(notificationReceived), userInfo: nil, repeats: true)
RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode)
私はそれが有用であろう願っています!
アプリケーションを閉じると、現在のタイマーと時計の値を長い属性の中に秒またはミリ秒で格納します。私は共有できる一般的なものを使用します:
static let userDefaults = UserDefaults.standard
public static func set<T: Hashable> (withValue value: T, andKey key: String) {
userDefaults.set(value, forKey: key)
userDefaults.synchronize()
}
public static func get(forKey key: String) -> Any? {
if((userDefaults.object(forKey: key)) != nil){
let data = userDefaults.object(forKey: key) as? Any
return data
}
return nil
}
もう一度アプリケーションを起動するときは、getメソッドを使用します。秒と保存された時間を言うことができます。その後、現在の時刻と保存されている時刻を比較し、その間の秒数を計算して、保存された秒数に時間差を加えれば、タイマーを提示された値に設定してそのまま使用できます。バックグラウンドで実行するための要求を識別トークンによって
NotificationCenter.default.addObserver(self, selector: #selector(storeTime), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
func storeTime() {
"UserDefaultClassName".set(withValue: "preferably dictionary", andKey: String)
}
アプリが再び実行されるときにタイマーを再起動する必要があります。 – rmaddy
ストップウオッチまたはタイマーが消えた時間を保存し、アプリを再び開くときに新しい値を設定するために「バックグラウンドで」過ごした時間を計算します。 – LinusGeffarth
彼らはどこかに書かれた 'time_start'(' NSUserDefaults'のような)を必要とし、再起動後も単に続けることができます。 –