每秒更新一次实时活动 - Swift

Pie*_*neo 4 swift dynamic-island activitykit

我正在寻找一种每秒或每 2 秒更新实时活动的方法,而不使用推送通知,同时将应用程序保持在后台。

你有什么建议吗?我尝试过类似的操作,但几秒钟后它就停止工作了:

       var bgTask = UIBackgroundTaskIdentifier(rawValue: 1324)
        bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
            UIApplication.shared.endBackgroundTask(bgTask)
        })
        let timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(updateInfo), userInfo: nil, repeats: true)
        RunLoop.current.add(timer, forMode: .default)
Run Code Online (Sandbox Code Playgroud)

mar*_*nax 5

似乎没有办法每秒或以任何其他过于频繁的方式更新实时活动。看起来省电在这里至关重要,即使应用程序在后台运行,系统也会在几秒钟后切断更新。

如果您需要在 LiveActivity 上显示计时器,根据docs,可以使用以下初始化程序,该初始化程序Text似乎专用于该用例:

init(timerInterval: ClosedRange<Date>, pauseTime: Date? = nil, countsDown: Bool = true, showsHours: Bool = true)
Run Code Online (Sandbox Code Playgroud)

例如:

Text(timerInterval: context.state.deliveryTimer, countsDown: true)
Run Code Online (Sandbox Code Playgroud)

创建一个实例,显示在提供的时间间隔内计数的计时器。它只是自动计算时间,因此无需考虑自己实现计时器。但是,当计时器结束时无法侦听以更新活动,因此看起来可能有必要安排通知后台任务,并在计时器结束时接收/运行和处理它。

似乎这里提到的应用程序使用了我上面描述的机制。您必须考虑您的用例并决定实时活动是否适合您的应用程序。