Files
Termind/TFI/Platform/MobileBackgroundController.swift
T
2026-09-11 21:07:44 +08:00

30 lines
813 B
Swift

import UIKit
@MainActor
protocol MobileBackgroundTaskManaging: AnyObject {
func begin(expiration: @escaping @MainActor () -> Void)
func finish()
}
@MainActor
final class MobileBackgroundController: MobileBackgroundTaskManaging {
private var task: UIBackgroundTaskIdentifier = .invalid
func begin(expiration: @escaping @MainActor () -> Void) {
finish()
task = UIApplication.shared.beginBackgroundTask(withName: "Finish remote session work") { [weak self] in
Task { @MainActor in
expiration()
self?.finish()
}
}
if task == .invalid { expiration() }
}
func finish() {
guard task != .invalid else { return }
UIApplication.shared.endBackgroundTask(task)
task = .invalid
}
}