2

想知道我们将如何在 watchOS 2 中使用 NSURLSession 后台任务。

我想在并发症醒来时生成后台下载。我不清楚的是我会在哪里找到application:handleEventsForBackgroundURLSession

WatchKit 扩展的哪一部分会被唤醒,我在哪里可以得到这个回调?这部分在文档中不是很清楚。

4

1 回答 1

2

我想在并发症醒来时生成后台下载。

如果您希望在复杂控制器中异步获取数据,您会发现它不可靠,并且不鼓励

为避免不必要地耗尽复杂程序的执行时间预算,您可能需要考虑让手机处理后台提取,然后使用WCSession实例来transferCurrentComplicationUserInfo. 这将发送一条高优先级消息,唤醒您的扩展程序以传递数据。

那时,您可以:

  • 等待并发症控制器的计划更新发生,或

  • reloadTimelineForComplication通过调用或手动向 ClockKit 发出信号以更新您的复杂功能extendTimelineForComplication

您可以在watchOS 2 转换指南中的更新您的复杂数据下找到具体细节。

更新数据的不同方法:

  • 通过扩展显式手动更新

    当您的并发症有新数据时,您必须使用 CLKComplicationServer 对象的 reloadTimelineForComplication: 或 extendTimelineForComplication: 方法向 ClockKit 发出信号,告知您的并发症已准备好更新。...调用这些方法会导致 ClockKit 创建您的数据源对象并从中请求新数据。

  • 通过复杂控制器计划自动更新(使用缓存数据)requestedUpdateDidBegin

    计划更新对于数据在可预测时间发生变化的应用非常有用。当计划更新发生时,ClockKit 首先调用数据源的 requestedUpdateDidBegin 或 requestedUpdateBudgetExhausted 方法。使用这些方法来确定您是否有可用的新数据。

  • 通过推送通知WKExtensionDelegate didReceiveRemoteNotification

  • 通过手动更新WCSession transferCurrentComplicationUserInfo

    当您的 iOS 应用收到针对您的复杂功能的更新数据时,它可以使用 Watch Connectivity 框架立即更新您的复杂功能。WCSession 的 transferCurrentComplicationUserInfo: 方法向您的 WatchKit 扩展发送高优先级消息,根据需要唤醒它以传递数据。收到数据后,根据需要扩展或重新加载您的时间线,以强制 ClockKit 从您的数据源请求新数据。

无论哪种方式,并发症控制器都应该只使用它可用的新数据,而不是尝试(异步)获取它需要的任何数据。

于 2016-01-12T19:05:13.640 回答