9

watchOS 3 の場合、Apple はWKRefreshBackgroundTaskgetNextRequestedUpdateDate.

新しいアプローチを使用して、2 つの更新の間の時間をどのように判断できますか?

私は(URLから)要求しているデータをハックしgetCurrentTimelineEntryて複雑さを更新するだけですが、それはAppleが推奨するものではないと思います.

短いコード例は大きな助けになります。

4

1 に答える 1

10

私は一般的にこれを別の答えでカバーしましたが、ここであなたの特定の質問に対処します.

複雑なコントローラーをハックして (非同期の) フェッチを行うべきではないというのは正しいことです。データ ソースは、コンプリケーション サーバーからの要求に応じて手元にある既存のデータを返すことのみを担当する必要があります。これは watchOS 2 に当てはまり、watchOS 3 でも当てはまります。

watchOS 3 では、各バックグラウンド更新で次の更新をスケジュールできます。

プロセスの概要:

特定のケースでは、WKURLSessionRefreshBackgroundTaskタスクのダウンロードが完了するまで待つことができます。その時点で、既存のバックグラウンド タスクを完了する前に、次のバックグラウンド更新をスケジュールします。

その時点で、拡張機能が再び起動され、バックグラウンド プロセス全体が再び開始されます。

  • Web サービスから新しいデータをリクエストする
  • 返信を処理してデータ ストアを更新する
  • コンプリケーションにそれ自体を更新するように指示します (手元にある新しいデータを使用します)。
  • ドックのスナップショットを更新する
  • 今後のバックグラウンド更新タスクをスケジュールする
  • 現在のタスクを完了としてマークします。

各サブタスクがリフレッシュ サイクルの個別の側面を処理し、次のサブタスクのスケジューリングを担当する、一連の異なるバックグラウンド サブタスクを連鎖させることもできます。

サンプルコード:

まだ見ていない場合は、Apple がWatchBackgroundRefreshサンプル コードを提供して、この一部を示しています。使用できます

WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate:userInfo:)

現在のタスクが完了する前に、(最初のタスクまたは) 将来のタスクをスケジュールします。

この例では更新ボタンを使用して次のバックグラウンド更新をスケジュールしていますが、次の要求をスケジュールするのがユーザー アクションであろうとバックグラウンド タスクであろうと、概念は同じです)。

于 2016-06-22T15:48:20.543 に答える