首页 > 解决方案 > 如何在 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) {

    }
}

它仅在显示处于活动状态时起作用。

标签: swiftwatchoswatchos-3

解决方案


推荐阅读