You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Live Activity后台更新失效求助:Workout应用按钮状态无法持久更新

iOS Live Activity后台长时间更新失效问题求解

问题场景

我正在为健身追踪App实现iOS Live Activity功能,简化后Live Activity仅包含一个暂停/恢复训练的按钮:训练运行时按钮标题为“Pause”,暂停时为“Resume”。

通过AppIntents处理Live Activity上的按钮点击,将操作传递至后台持续运行的主App(主App会在训练结束前3秒播放音效,因此保持后台活跃状态),主App接收操作后完成训练的暂停/恢复逻辑。

核心问题

主App调用Activity.update(_ content: ActivityContent<Activity.ContentState>) async方法更新Live Activity按钮标题时,仅在App进入后台后的前十几秒内有效,之后更新完全停止,但Live Activity上的按钮始终可正常响应点击。

观察到App Store中部分同类应用可在后台长时间更新Live Activity,且无需依赖远程推送通知(离线/飞行模式下仍可正常工作),现寻求后台响应用户操作时强制更新Live Activity的解决方案。

附代码与日志

更新代码

class func updateCircularRunLiveActivity(stateString: String.... more values here) {
    if ActivityAuthorizationInfo().areActivitiesEnabled {
        if let activityID = UserDefaults.standard.string(forKey: "CircularRunLiveActivity_ID") {
            let activity = Activity<CurcularRunWidgetAttributes>.activities.first(where: { $0.id == activityID })
            let updatedState = CurcularRunWidgetAttributes.ContentState(stateString: stateString.... more values here)
            Task {
                await activity?.update(.init(state: updatedState, staleDate: nil))
                print("Live Activity updated. \(updatedState.stateString) - \(activity?.content.state.stateString)")
            }
        }
    }
}

主App前台日志

Live Activity updated. 0 - nil
Live Activity updated. 1 - Optional("")
Live Activity updated. 2 - Optional("1")
Live Activity updated. 3 - Optional("2")
Live Activity updated. 4 - Optional("3")
Live Activity updated. 5 - Optional("4")
Live Activity updated. 6 - Optional("5")
Live Activity updated. 7 - Optional("6")
Live Activity updated. 8 - Optional("7")
Live Activity updated. 9 - Optional("8")
Live Activity updated. 10 - Optional("9")
Live Activity updated. 11 - Optional("10")

主App后台日志

Live Activity updated. 0 - nil
Live Activity updated. 1 - Optional("")
Live Activity updated. 2 - Optional("1")
Live Activity updated. 3 - Optional("2")
Live Activity updated. 4 - Optional("2") <- not updated to State with stateString == "3"
Live Activity updated. 5 - Optional("2") <- and stuck forever
Live Activity updated. 6 - Optional("2") <- ...
Live Activity updated. 7 - Optional("2")
Live Activity updated. 8 - Optional("2")
Live Activity updated. 9 - Optional("2")
Live Activity updated. 10 - Optional("2")
Live Activity updated. 11 - Optional("2")

补充说明

更新频率不影响问题:每秒更新时会在stateString约为15时卡住;10秒一次更新时则在前15秒内有效,之后停止更新。

内容的提问来源于stack exchange,提问作者Grigoriy Uskov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:52:13