ありがとう:
- 停止normalTimer。
- 停止backgroundTaskTimer:
は新backgroundTaskTimer WillForegroundで
を開始
- 。
サンプルコードの下に検索normalTimer開始:
Appdelegateで
:
宣言:
var backgroundUpdateTask: UIBackgroundTaskIdentifier!
var backgroundTaskTimer:Timer! = Timer()
を実装:
ApplicationDidEnterBackgroundで
func doBackgroundTask() {
DispatchQueue.global(qos: .default).async {
self.beginBackgroundTask()
if self.backgroundTaskTimer != nil {
self.backgroundTaskTimer.invalidate()
self.backgroundTaskTimer = nil
}
//Making the app to run in background forever by calling the API
self.backgroundTaskTimer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(self.startTracking), userInfo: nil, repeats: true)
RunLoop.current.add(self.backgroundTaskTimer, forMode: RunLoopMode.defaultRunLoopMode)
RunLoop.current.run()
// End the background task.
self.endBackgroundTask()
}
}
func beginBackgroundTask() {
self.backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(withName: "Track trip", expirationHandler: {
self.endBackgroundTask()
})
}
func endBackgroundTask() {
UIApplication.shared.endBackgroundTask(self.backgroundUpdateTask)
self.backgroundUpdateTask = UIBackgroundTaskInvalid
}
:ApplicationWillEnterForegroundで
func applicationDidEnterBackground(_ application: UIApplication) {
//Start the background fetch
self.doBackgroundTask()
}
:
func applicationWillEnterForeground(_ application: UIApplication) {
if self.backgroundTaskTimer != nil {
self.backgroundTaskTimer.invalidate()
self.backgroundTaskTimer = nil
}
}
検索してください。これは何度もカバーされていました。 https://stackoverflow.com/search?q=%5Bswift%5D+timer+background – rmaddy
「バックグラウンドで実行されない」という意味の情報をさらに提供する必要があります。あなたはそれがバックグラウンドでやりたいですか? – ryantxr
ryantxr私が意味することは、タイマーが一定の時間に達すると、オーディオを実行できるように、1の間隔で時間をバックグラウンドで実行し続けたいということです。 –