swift 如何清除后台任务队列手动当用户不再需要这个功能?

mi7gmzs6  于 2023-02-28  发布在  Swift
关注(0)|答案(1)|浏览(158)

用户通过按下执行以下操作的按钮来安排后台任务(即在应用程序中打开通知):

WKApplication.shared().scheduleBackgroundRefresh(withPreferredDate: Date(timeIntervalSinceNow: 5), userInfo: nil) { (error: Error?) in
    if let error = error {
        print("Error occured while scheduling background refresh: \(error.localizedDescription)")
    } else {
        print("scheduled")
    }
}

此任务的处理方式如下:

class ApplicationDelegate: NSObject, WKApplicationDelegate {
    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
        for task in backgroundTasks {
            // schedule a new task for tomorrow ✅

            // refresh app data - in progress

            // immediately trigger a local notification with fresh data ✅
            
            task.setTaskCompletedWithSnapshot(false)
        }
    }
}

现在,如果用户关闭通知,此操作必须清除所有挂起的通知请求,但这是没有实际意义的,因为预定的后台任务仍将运行,循环和通知将在第二天继续(或者,至少后台任务将继续运行,而不管通知是否触发)。我找不到关于如何取消调度/删除已调度后台任务的文档(s),用户如何主动地(通过点击按钮)完成这一操作?

mkshixfv

mkshixfv1#

不存在这样的后台任务"队列";一次只能安排一个后台任务。安排一个新任务会取消任何以前安排的任务(所以从技术上讲,它是一个最大深度为1的队列)😀)
后台任务启动后,请检查用户的首选项以查看他们是否仍需要通知。如果仍需要通知,请发布通知并计划另一个任务。如果不需要,则操作已完成。
每当手表应用离开前台时,您都可以检查通知是否已启用,并安排后台任务。
如果以前没有计划任务,那么现在有了,如果以前有计划任务,那么你刚刚替换了它;没问题。

相关问题