如何在watchOS中检测用户关闭应用?避免Timer启动时间存入UserDefaults
解决watchOS SwiftUI应用中检测应用主动关闭的问题
watchOS 环境下不存在
UIApplication,对应的是WKExtension,你需要使用WatchKit框架提供的终止通知替代iOS的UIApplication.willTerminateNotification。正确实现步骤:
- 导入
WatchKit框架(无需导入UIKit) - 使用
WKExtension.shared().applicationWillTerminateNotification作为监听的通知名称
- 导入
以下是可直接使用的代码示例:
import SwiftUI import WatchKit struct TimerView: View { var body: some View { Text("计时器界面") .onReceive(NotificationCenter.default.publisher(for: WKExtension.shared().applicationWillTerminateNotification)) { _ in // 用户主动关闭应用时,删除UserDefaults中保存的启动时间 UserDefaults.standard.removeObject(forKey: "timerStartDate") } } }
逻辑说明:当用户主动关闭watchOS应用时,该通知会被触发,此时你可在闭包中执行清理操作——删除UserDefaults里存储的启动时间,确保应用下次启动时不会读取无效的计时起点。
注意:watchOS应用生命周期和iOS存在差异,若系统因资源不足等原因强制终止应用,该通知可能无法触发,但用户主动滑动关闭应用的场景下,通知可稳定触发。
内容的提问来源于stack exchange,提问作者Fanfan
相关产品推荐
相关产品推荐

