swift - 如何在 watchOS 中运行后台进程?
问题描述
我已经为 Apple Watch 制作了我的第一个应用程序,并且面临不可能每 10 秒向我的后端发送数据的问题。
当显示器关闭时应用程序被冻结,当显示器打开时从头开始运行。
我试着像这个例子一样运行锻炼课程。
但这无济于事,应用程序在 10 秒不活动后被冻结。
我尝试在 InterfaceController.swift 中每 10 秒向我的后端发送加速度计数据:
//...
override func willActivate() {
super.willActivate()
startWorkout() //it's copied from example
startAnglesTracker()
}
func startAnglesTracker() {
if motion.isAccelerometerAvailable && !motion.isAccelerometerActive {
motion.accelerometerUpdateInterval = 10
motion.startAccelerometerUpdates(to: OperationQueue.main) {
//sending here
}
}
}
private func startWorkout() {
let workoutConfiguration = HKWorkoutConfiguration()
workoutConfiguration.activityType = .crossTraining
workoutConfiguration.locationType = .indoor
do {
workoutSession = try HKWorkoutSession(configuration: workoutConfiguration)
workoutSession?.delegate = self
healthStore.start(workoutSession!)
vibrate()
} catch {
serverData.setText("workoutSession error")
}
}
//...
extension InterfaceController: HKWorkoutSessionDelegate {
func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: Error) {
}
func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {
}
func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) {
}
}
它仅在显示处于活动状态时起作用。
解决方案
推荐阅读
- css - 计算 font-size 与其容器宽度的比例
- google-maps - Flutter google_maps 捏缩放
- c# - 我正在尝试使用 Selenium C# 验证 Rows(2 - 25) 是否小于或等于 Row1。我不知道如何从那里开始
- android - NotFoundException: 绑定字符串资源时字符串资源 ID #0x0
- python - 在没有 Python 类的新实例的情况下调用更改方法
- python - 熊猫数据框填充了“NaN”,而不是正确的值
- javascript - 删除子元素会导致内存泄漏吗?
- google-cloud-platform - 无法从数据融合实例中删除自定义插件
- java - 如何以编程方式停止 adb 无线?
- android - Android NavigationView setBackgroundTintList 不起作用