区块链技术博客
www.b2bchain.cn

保持复杂功能的及时更新求职学习资料

本文介绍了保持复杂功能的及时更新求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

复杂功能是Apple Watch用户体验到一款watchOS App最直观的方式,随着watchOS 7一同到来的表盘共享、SwiftUI复杂功能和多个复杂功能API等功能更使得复杂功能成为了watchOS应用所关注的重点。作为提供时效信息的重要工具,保持这些抬腕可见的的复杂功能组件及时更新便成为了重中之重。WatchOS则为开发者提供了特别的能力来实现这一点。

在watchOS上,复杂功能组件即便在其他App可能被停止运行的时候依然保持工作;如果系统决定终止一个复杂功能组件的运行,它也将在一段时间后被重新执行以确保信息更新。由于复杂功能组件随时都是可见的,这些组件在考虑隐私相关问题时会被认为是“正在使用”状态(原文:complication apps are considered “in use” for privacy)。

在这一Session中,我们将了解如何保持复杂功能的及时更新。我们将通过一个示例应用来说明需要用到技术,学习如何在复杂功能在前台运行时更新数据,甚至在复杂功能组件不在前台时使用watchOS的相应机制更新数据。

后台刷新机制主要有两种:后台App刷新和后台URLSession。后台App刷新允许App安排后台运行时刻来访问手表上的API与数据。App也可以通过安排后台URLSession来从服务器获取数据,这些数据可以通过复杂功能推送(Complications Pushes)机制直接传输到手表上的App中。

保持复杂功能的及时更新

在上述三种后台刷新机制中,App都不需要时刻保持运行,相反,App会在必要的时机被唤醒以刷新它们的复杂功能组件。取决于你的需求,这三种机制可以被独立使用,也可以组合在一起使用。

我们将通过一个放风筝App来演示这些技巧,我们的目标是构建一款即便没有手机也能完整运行的独立App,并且会用到watchOS 7的能力来支持多个同时运行的复杂功能组件。在这一Session里,我们不会提及如何设计并开发这样一款App,你可以在文末的链接中找到相关Session。

这款放风筝App主要包含这些复杂功能组件:

  • 使用后台App刷新从HealthKit获取当天运动数据
  • 使用后台URLSession从服务端获取所在地天气数据
  • 使用复杂功能推送来展示来自朋友们的点赞

首先,我们先来看看前台刷新。用户启动App是进行前台刷新的绝佳时机,此时如果有已知的数据更新,可以直接使用ClockKit API来重新加载复杂组件的Timeline。每个复杂功能都有一组Entry组成的Timeline构成。当一个App希望刷新它的复杂功能组件时,可以对希望刷新的复杂功能组件调用readLoadTimeline(for:)方法。下面的代码定义了updateActiveComplications方法,这一方法遍历所有激活的复杂功能组件并使用上述API请求更新。

class ExtensionDelegate: NSObject, WKExtensionDelegate {     func updateActiveComplications() {        let complicationServer = CLKComplicationServer.sharedInstance()         if let activeComplications = complicationServer.activeComplications {             for complication in activeComplications {                complicationServer.reloadTimeline(for: complication)                // 在这里我们对每个复杂功能都进行了reload                // 实际上你可以使用更加细化的判断,只更新那些需要更新的组件              }         }      } }

在调用reloadTimeline方法后,复杂功能服务会调用App的CLKComplicationDataSource来获取去currentTimelineEntry。App则会使用一个模版和Provider来构造一个Entry,并使用复杂功能服务提供的回调handler回传构造好的Entry。

保持复杂功能的及时更新

下面是上述方法在实际使用中的一个例子:

class ComplicationController: NSObject, CLKComplicationDataSource {     func getCurrentTimelineEntry(for complication: CLKComplication,          withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {         switch (complication.family) {         case .modularSmall:            let template = CLKComplicationTemplateModularLargeTallBody.init(                                headerTextProvider: headerTextProvider,                                 bodyTextProvider: bodyTextProvider)             entry = CLKComplicationTimelineEntry(date: Date(),                          complicationTemplate: template)         }         handler(entry)     } }

以上是当我们的App在前台运行时的数据刷新方式,但是如果我们的App不在前台,就需要使用到一开始提到的三种后台刷新机制了。

现在回到我们的放风筝App,我们先来看看怎样利用后台刷新从HealthKit获取运动数据。

后台刷新允许我们安排周期性的更新来确保复杂功能及时更新,这种更新一小时最多可以进行4次,这一数字不随当前表面上复杂功能数量变化,但会受到当前进程数和耗电量的影响。我们可以调用WKExtension的scheduleBackgroundRefresh来安排后台App刷新。由于你的App可能在后台被启动,所以请考虑将第一次请求放到applicationDidFinishLaunching()中执行。

保持复杂功能的及时更新

在下面的代码中,我们制定了后台刷新计划。我们通过指定scheduledDate来安排后台刷新的时间,在示例代码中,如果这是我们的第一个请求,我们会安排的更早一些。

private func scheduleBAR(_ first: Bool) {   let now = Date()   let scheduledDate = now.addingTimeInterval(first ? 60 : 15*60)   let info:NSDictionary = [“submissionDate”:now]   let wkExt = WKExtension.shared()   wkExt.scheduleBackgroundRefresh(withPreferredDate: scheduledDate, userInfo:info)   { (error: Error?) in    if (error != nil) {      print("background refresh could not be scheduled (error.debugDescription)")    }    } }

在请求后台刷新后,系统会在合适的时机调用我们的App进行刷新,这一时机取决于系统的多种状态,可能被推出但不会早于你请求的时机。一般情况下,实际刷新时机会比你请求的时机晚一到两分钟,但也不绝对。你可以使用UserInfo字典来传递数据,在上述例子中,我们简单地传递了后台刷新请求发出的时间点。最后,我们调用WKExtensionscheduleBackgroundRefresh方法来发出请求。WKExtension会在主线程异步调用我们的回调方法,处理可能发生的错误。

当后台刷新任务就绪后,我们的App会被唤醒,对应的WKExtensionDelegate会被用来处理这一后台任务。在我们需要的数据准备好后,我们会请求一次复杂功能刷新,同时安排下一次后台刷新任务。

保持复杂功能的及时更新

接下来,让我们看看怎样实现上述功能:

class ExtensionDelegate: NSObject, WKExtensionDelegate {   func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {     for task in backgroundTasks {       switch task {         case let backgroundTask as WKApplicationRefreshBackgroundTask:         if let userInfo:NSDictionary = backgroundTask.userInfo as? NSDictionary {           if let then:Date = userInfo["submissionDate"] as! Date {             let interval = Date.init().timeIntervalSince(then)             print("interval since request was made (interval)")           }         }         self.updateActiveComplications()         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false) ...

WKExtensionDelegate定义了一个handle(_:)方法用于处理后台任务,系统中可能同时存在多个要处理的后台任务,因此这一方法接受一个Set作为参数。我们需要便利所有的后台任务,一一处理。在这一例之中,我们关注的是WKApplicationRefreshBackgroundTask类型的任务,在上述代码中,我们通过之前传入的UserInfo来计算任务实际执行距离请求过去了多长时间,

此时我们的App已经处于激活状态,因此可以直接调用updateActiveComplications来刷新我们的复杂功能。接下来,我们请求下一次后台刷新任务。最后,调用任务对象的setTaskCompletedWithSnapshot方法将其标记为已完成。每次复杂功能刷新后,都会创建一个快照,这里我们不需要单独创建一次,因此传入false

一旦任务标记为完成,我们的App有可能立刻被挂起,因此所有操作都需要在这之前完成。如果我们想要做一些更加复杂的事务,就需要对对代码进行一些修改,以免在ExtensionDelegate中包含太多逻辑。

保持复杂功能的及时更新

通过编写一个独立的HealthDataProvider,我们可以将业务逻辑剥离出去,在回调中完成刷新操作,从而大大简化代码:

var healthDataProvider: HealthDataProvider func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {   for task in backgroundTasks {     switch task {       case let backgroundTask as WKApplicationRefreshBackgroundTask:       ...       healthDataProvider.refresh() { (update: Bool) -> Void in         if update {           self.updateActiveComplications()         }         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false)       } ...

小结:后台App刷新适用于安排周期性更新的后台任务,你的App每小时最多会被会被唤醒四次来处理这些后台任务,使用后台App刷新时,请遵守以下规则:

复杂功能是Apple Watch用户体验到一款watchOS App最直观的方式,随着watchOS 7一同到来的表盘共享、SwiftUI复杂功能和多个复杂功能API等功能更使得复杂功能成为了watchOS应用所关注的重点。作为提供时效信息的重要工具,保持这些抬腕可见的的复杂功能组件及时更新便成为了重中之重。WatchOS则为开发者提供了特别的能力来实现这一点。

在watchOS上,复杂功能组件即便在其他App可能被停止运行的时候依然保持工作;如果系统决定终止一个复杂功能组件的运行,它也将在一段时间后被重新执行以确保信息更新。由于复杂功能组件随时都是可见的,这些组件在考虑隐私相关问题时会被认为是“正在使用”状态(原文:complication apps are considered “in use” for privacy)。

在这一Session中,我们将了解如何保持复杂功能的及时更新。我们将通过一个示例应用来说明需要用到技术,学习如何在复杂功能在前台运行时更新数据,甚至在复杂功能组件不在前台时使用watchOS的相应机制更新数据。

后台刷新机制主要有两种:后台App刷新和后台URLSession。后台App刷新允许App安排后台运行时刻来访问手表上的API与数据。App也可以通过安排后台URLSession来从服务器获取数据,这些数据可以通过复杂功能推送(Complications Pushes)机制直接传输到手表上的App中。

保持复杂功能的及时更新

在上述三种后台刷新机制中,App都不需要时刻保持运行,相反,App会在必要的时机被唤醒以刷新它们的复杂功能组件。取决于你的需求,这三种机制可以被独立使用,也可以组合在一起使用。

我们将通过一个放风筝App来演示这些技巧,我们的目标是构建一款即便没有手机也能完整运行的独立App,并且会用到watchOS 7的能力来支持多个同时运行的复杂功能组件。在这一Session里,我们不会提及如何设计并开发这样一款App,你可以在文末的链接中找到相关Session。

这款放风筝App主要包含这些复杂功能组件:

  • 使用后台App刷新从HealthKit获取当天运动数据
  • 使用后台URLSession从服务端获取所在地天气数据
  • 使用复杂功能推送来展示来自朋友们的点赞

首先,我们先来看看前台刷新。用户启动App是进行前台刷新的绝佳时机,此时如果有已知的数据更新,可以直接使用ClockKit API来重新加载复杂组件的Timeline。每个复杂功能都有一组Entry组成的Timeline构成。当一个App希望刷新它的复杂功能组件时,可以对希望刷新的复杂功能组件调用readLoadTimeline(for:)方法。下面的代码定义了updateActiveComplications方法,这一方法遍历所有激活的复杂功能组件并使用上述API请求更新。

class ExtensionDelegate: NSObject, WKExtensionDelegate {     func updateActiveComplications() {        let complicationServer = CLKComplicationServer.sharedInstance()         if let activeComplications = complicationServer.activeComplications {             for complication in activeComplications {                complicationServer.reloadTimeline(for: complication)                // 在这里我们对每个复杂功能都进行了reload                // 实际上你可以使用更加细化的判断,只更新那些需要更新的组件              }         }      } }

在调用reloadTimeline方法后,复杂功能服务会调用App的CLKComplicationDataSource来获取去currentTimelineEntry。App则会使用一个模版和Provider来构造一个Entry,并使用复杂功能服务提供的回调handler回传构造好的Entry。

保持复杂功能的及时更新

下面是上述方法在实际使用中的一个例子:

class ComplicationController: NSObject, CLKComplicationDataSource {     func getCurrentTimelineEntry(for complication: CLKComplication,          withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {         switch (complication.family) {         case .modularSmall:            let template = CLKComplicationTemplateModularLargeTallBody.init(                                headerTextProvider: headerTextProvider,                                 bodyTextProvider: bodyTextProvider)             entry = CLKComplicationTimelineEntry(date: Date(),                          complicationTemplate: template)         }         handler(entry)     } }

以上是当我们的App在前台运行时的数据刷新方式,但是如果我们的App不在前台,就需要使用到一开始提到的三种后台刷新机制了。

现在回到我们的放风筝App,我们先来看看怎样利用后台刷新从HealthKit获取运动数据。

后台刷新允许我们安排周期性的更新来确保复杂功能及时更新,这种更新一小时最多可以进行4次,这一数字不随当前表面上复杂功能数量变化,但会受到当前进程数和耗电量的影响。我们可以调用WKExtension的scheduleBackgroundRefresh来安排后台App刷新。由于你的App可能在后台被启动,所以请考虑将第一次请求放到applicationDidFinishLaunching()中执行。

保持复杂功能的及时更新

在下面的代码中,我们制定了后台刷新计划。我们通过指定scheduledDate来安排后台刷新的时间,在示例代码中,如果这是我们的第一个请求,我们会安排的更早一些。

private func scheduleBAR(_ first: Bool) {   let now = Date()   let scheduledDate = now.addingTimeInterval(first ? 60 : 15*60)   let info:NSDictionary = [“submissionDate”:now]   let wkExt = WKExtension.shared()   wkExt.scheduleBackgroundRefresh(withPreferredDate: scheduledDate, userInfo:info)   { (error: Error?) in    if (error != nil) {      print("background refresh could not be scheduled (error.debugDescription)")    }    } }

在请求后台刷新后,系统会在合适的时机调用我们的App进行刷新,这一时机取决于系统的多种状态,可能被推出但不会早于你请求的时机。一般情况下,实际刷新时机会比你请求的时机晚一到两分钟,但也不绝对。你可以使用UserInfo字典来传递数据,在上述例子中,我们简单地传递了后台刷新请求发出的时间点。最后,我们调用WKExtensionscheduleBackgroundRefresh方法来发出请求。WKExtension会在主线程异步调用我们的回调方法,处理可能发生的错误。

当后台刷新任务就绪后,我们的App会被唤醒,对应的WKExtensionDelegate会被用来处理这一后台任务。在我们需要的数据准备好后,我们会请求一次复杂功能刷新,同时安排下一次后台刷新任务。

保持复杂功能的及时更新

接下来,让我们看看怎样实现上述功能:

class ExtensionDelegate: NSObject, WKExtensionDelegate {   func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {     for task in backgroundTasks {       switch task {         case let backgroundTask as WKApplicationRefreshBackgroundTask:         if let userInfo:NSDictionary = backgroundTask.userInfo as? NSDictionary {           if let then:Date = userInfo["submissionDate"] as! Date {             let interval = Date.init().timeIntervalSince(then)             print("interval since request was made (interval)")           }         }         self.updateActiveComplications()         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false) ...

WKExtensionDelegate定义了一个handle(_:)方法用于处理后台任务,系统中可能同时存在多个要处理的后台任务,因此这一方法接受一个Set作为参数。我们需要便利所有的后台任务,一一处理。在这一例之中,我们关注的是WKApplicationRefreshBackgroundTask类型的任务,在上述代码中,我们通过之前传入的UserInfo来计算任务实际执行距离请求过去了多长时间,

此时我们的App已经处于激活状态,因此可以直接调用updateActiveComplications来刷新我们的复杂功能。接下来,我们请求下一次后台刷新任务。最后,调用任务对象的setTaskCompletedWithSnapshot方法将其标记为已完成。每次复杂功能刷新后,都会创建一个快照,这里我们不需要单独创建一次,因此传入false

一旦任务标记为完成,我们的App有可能立刻被挂起,因此所有操作都需要在这之前完成。如果我们想要做一些更加复杂的事务,就需要对对代码进行一些修改,以免在ExtensionDelegate中包含太多逻辑。

保持复杂功能的及时更新

通过编写一个独立的HealthDataProvider,我们可以将业务逻辑剥离出去,在回调中完成刷新操作,从而大大简化代码:

var healthDataProvider: HealthDataProvider func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {   for task in backgroundTasks {     switch task {       case let backgroundTask as WKApplicationRefreshBackgroundTask:       ...       healthDataProvider.refresh() { (update: Bool) -> Void in         if update {           self.updateActiveComplications()         }         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false)       } ...

小结:后台App刷新适用于安排周期性更新的后台任务,你的App每小时最多会被会被唤醒四次来处理这些后台任务,使用后台App刷新时,请遵守以下规则:

复杂功能是Apple Watch用户体验到一款watchOS App最直观的方式,随着watchOS 7一同到来的表盘共享、SwiftUI复杂功能和多个复杂功能API等功能更使得复杂功能成为了watchOS应用所关注的重点。作为提供时效信息的重要工具,保持这些抬腕可见的的复杂功能组件及时更新便成为了重中之重。WatchOS则为开发者提供了特别的能力来实现这一点。

在watchOS上,复杂功能组件即便在其他App可能被停止运行的时候依然保持工作;如果系统决定终止一个复杂功能组件的运行,它也将在一段时间后被重新执行以确保信息更新。由于复杂功能组件随时都是可见的,这些组件在考虑隐私相关问题时会被认为是“正在使用”状态(原文:complication apps are considered “in use” for privacy)。

在这一Session中,我们将了解如何保持复杂功能的及时更新。我们将通过一个示例应用来说明需要用到技术,学习如何在复杂功能在前台运行时更新数据,甚至在复杂功能组件不在前台时使用watchOS的相应机制更新数据。

后台刷新机制主要有两种:后台App刷新和后台URLSession。后台App刷新允许App安排后台运行时刻来访问手表上的API与数据。App也可以通过安排后台URLSession来从服务器获取数据,这些数据可以通过复杂功能推送(Complications Pushes)机制直接传输到手表上的App中。

保持复杂功能的及时更新

在上述三种后台刷新机制中,App都不需要时刻保持运行,相反,App会在必要的时机被唤醒以刷新它们的复杂功能组件。取决于你的需求,这三种机制可以被独立使用,也可以组合在一起使用。

我们将通过一个放风筝App来演示这些技巧,我们的目标是构建一款即便没有手机也能完整运行的独立App,并且会用到watchOS 7的能力来支持多个同时运行的复杂功能组件。在这一Session里,我们不会提及如何设计并开发这样一款App,你可以在文末的链接中找到相关Session。

这款放风筝App主要包含这些复杂功能组件:

  • 使用后台App刷新从HealthKit获取当天运动数据
  • 使用后台URLSession从服务端获取所在地天气数据
  • 使用复杂功能推送来展示来自朋友们的点赞

首先,我们先来看看前台刷新。用户启动App是进行前台刷新的绝佳时机,此时如果有已知的数据更新,可以直接使用ClockKit API来重新加载复杂组件的Timeline。每个复杂功能都有一组Entry组成的Timeline构成。当一个App希望刷新它的复杂功能组件时,可以对希望刷新的复杂功能组件调用readLoadTimeline(for:)方法。下面的代码定义了updateActiveComplications方法,这一方法遍历所有激活的复杂功能组件并使用上述API请求更新。

class ExtensionDelegate: NSObject, WKExtensionDelegate {     func updateActiveComplications() {        let complicationServer = CLKComplicationServer.sharedInstance()         if let activeComplications = complicationServer.activeComplications {             for complication in activeComplications {                complicationServer.reloadTimeline(for: complication)                // 在这里我们对每个复杂功能都进行了reload                // 实际上你可以使用更加细化的判断,只更新那些需要更新的组件              }         }      } }

在调用reloadTimeline方法后,复杂功能服务会调用App的CLKComplicationDataSource来获取去currentTimelineEntry。App则会使用一个模版和Provider来构造一个Entry,并使用复杂功能服务提供的回调handler回传构造好的Entry。

保持复杂功能的及时更新

下面是上述方法在实际使用中的一个例子:

class ComplicationController: NSObject, CLKComplicationDataSource {     func getCurrentTimelineEntry(for complication: CLKComplication,          withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {         switch (complication.family) {         case .modularSmall:            let template = CLKComplicationTemplateModularLargeTallBody.init(                                headerTextProvider: headerTextProvider,                                 bodyTextProvider: bodyTextProvider)             entry = CLKComplicationTimelineEntry(date: Date(),                          complicationTemplate: template)         }         handler(entry)     } }

以上是当我们的App在前台运行时的数据刷新方式,但是如果我们的App不在前台,就需要使用到一开始提到的三种后台刷新机制了。

现在回到我们的放风筝App,我们先来看看怎样利用后台刷新从HealthKit获取运动数据。

后台刷新允许我们安排周期性的更新来确保复杂功能及时更新,这种更新一小时最多可以进行4次,这一数字不随当前表面上复杂功能数量变化,但会受到当前进程数和耗电量的影响。我们可以调用WKExtension的scheduleBackgroundRefresh来安排后台App刷新。由于你的App可能在后台被启动,所以请考虑将第一次请求放到applicationDidFinishLaunching()中执行。

保持复杂功能的及时更新

在下面的代码中,我们制定了后台刷新计划。我们通过指定scheduledDate来安排后台刷新的时间,在示例代码中,如果这是我们的第一个请求,我们会安排的更早一些。

private func scheduleBAR(_ first: Bool) {   let now = Date()   let scheduledDate = now.addingTimeInterval(first ? 60 : 15*60)   let info:NSDictionary = [“submissionDate”:now]   let wkExt = WKExtension.shared()   wkExt.scheduleBackgroundRefresh(withPreferredDate: scheduledDate, userInfo:info)   { (error: Error?) in    if (error != nil) {      print("background refresh could not be scheduled (error.debugDescription)")    }    } }

在请求后台刷新后,系统会在合适的时机调用我们的App进行刷新,这一时机取决于系统的多种状态,可能被推出但不会早于你请求的时机。一般情况下,实际刷新时机会比你请求的时机晚一到两分钟,但也不绝对。你可以使用UserInfo字典来传递数据,在上述例子中,我们简单地传递了后台刷新请求发出的时间点。最后,我们调用WKExtensionscheduleBackgroundRefresh方法来发出请求。WKExtension会在主线程异步调用我们的回调方法,处理可能发生的错误。

当后台刷新任务就绪后,我们的App会被唤醒,对应的WKExtensionDelegate会被用来处理这一后台任务。在我们需要的数据准备好后,我们会请求一次复杂功能刷新,同时安排下一次后台刷新任务。

保持复杂功能的及时更新

接下来,让我们看看怎样实现上述功能:

class ExtensionDelegate: NSObject, WKExtensionDelegate {   func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {     for task in backgroundTasks {       switch task {         case let backgroundTask as WKApplicationRefreshBackgroundTask:         if let userInfo:NSDictionary = backgroundTask.userInfo as? NSDictionary {           if let then:Date = userInfo["submissionDate"] as! Date {             let interval = Date.init().timeIntervalSince(then)             print("interval since request was made (interval)")           }         }         self.updateActiveComplications()         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false) ...

WKExtensionDelegate定义了一个handle(_:)方法用于处理后台任务,系统中可能同时存在多个要处理的后台任务,因此这一方法接受一个Set作为参数。我们需要便利所有的后台任务,一一处理。在这一例之中,我们关注的是WKApplicationRefreshBackgroundTask类型的任务,在上述代码中,我们通过之前传入的UserInfo来计算任务实际执行距离请求过去了多长时间,

此时我们的App已经处于激活状态,因此可以直接调用updateActiveComplications来刷新我们的复杂功能。接下来,我们请求下一次后台刷新任务。最后,调用任务对象的setTaskCompletedWithSnapshot方法将其标记为已完成。每次复杂功能刷新后,都会创建一个快照,这里我们不需要单独创建一次,因此传入false

一旦任务标记为完成,我们的App有可能立刻被挂起,因此所有操作都需要在这之前完成。如果我们想要做一些更加复杂的事务,就需要对对代码进行一些修改,以免在ExtensionDelegate中包含太多逻辑。

保持复杂功能的及时更新

通过编写一个独立的HealthDataProvider,我们可以将业务逻辑剥离出去,在回调中完成刷新操作,从而大大简化代码:

var healthDataProvider: HealthDataProvider func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {   for task in backgroundTasks {     switch task {       case let backgroundTask as WKApplicationRefreshBackgroundTask:       ...       healthDataProvider.refresh() { (update: Bool) -> Void in         if update {           self.updateActiveComplications()         }         self.scheduleBAR(first: false)         backgroundTask.setTaskCompletedWithSnapshot(false)       } ...

小结:后台App刷新适用于安排周期性更新的后台任务,你的App每小时最多会被会被唤醒四次来处理这些后台任务,使用后台App刷新时,请遵守以下规则:

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 保持复杂功能的及时更新求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们