2

「C#とXAMLを使用したWindows 8アプリの構築」の166ページのJ.Liknessによると、OnResumingイベントについて、「[このイベントの]主な理由は、情報を更新するためのタイムリーなデータを提供するアプリケーションのためです。

私のアプリには、そのようなデータを含む1つのページがあります。そのため、ユーザーがアプリを再開し、明示的にそのページに戻るか、暗黙的/自動的にそのページに戻った場合(アプリが一時停止されたときにそのページにいたと仮定して)、データを更新します。しかし、アプリが一時停止/再開されたことをどうやって知ることができますか?

私の考えは、データが豊富なページがOnNavigatedTo()イベントで問い合わせることができるブール値を設定することです。それが本当なら、私はデータを更新します。これを行うためのより良い方法はありますか、そしておそらくもっと重要なことです:ユーザーがそのページにいて、アプリが一時停止されてから再開された場合、OnNavigatedTo()イベントが発生しますか?または、アプリはページが残されたことがないものとして表示し、そのため、元に戻されていませんか?おそらく、別のページレベルのイベントがより適切でしょうか?

4

1 に答える 1

1

関心のあるページを更新する必要がある場合のしきい値を決定する必要があると思います。ブール値ほど単純ではないと思います。ユーザーは一時停止してすぐに (たとえば 15 秒以内に) 再開する可能性があり、更新する価値はないかもしれませんが、同じユーザーがセカンダリ ページにとどまり、一時停止することなく、30 分後にページに戻ることもできます。ページ データがかなり古い可能性があります。あなたのブール値はタイムスタンプ以上である必要があるかもしれません。

つまり、Resuming イベントはOnNavigatedToを発生させません。どのページに戻っているかを知る必要がある場合は、一時停止するときにその情報をおそらくLocalSettingsに保存する必要があります。しかし、C#/XAML でSuspensionManagerを使用している場合、それは既にあなたに代わって行われていることを考慮してください。考えてみれば、あなたが望む動作は、アプリケーションが実行されたときに発生するはずの動作とあまり変わらない (仮にあったとしても)。終了状態から復帰します。

同様の方法で、呼び出しを追加できます

await SuspensionManager.RestoreAsync()

Resumeing イベントの実装として。これにより、OnNavigatedToが発生し、そのページを表示する通常のロジックが実行されます。

技術的には再開していません。再開イベントを使用して、ページ全体のリロードをトリガーしているだけです。ページの性質によっては、やり過ぎになる可能性があります (たとえば、半静的データが多く、揮発性データがほんの少ししかない場合など、再開時に静的データを復元する必要はありません)。「再開」と「終了」でどれだけリフレッシュするかをダイヤルバックしたい場合がありますが、SuspensionManager はコードであるため、表示および変更できるため、そのレベルの粒度を制御できます。そして、Resuming によって呼び出されたときと他の手段によって呼び出されたときに LoadStateAsync で実行する必要があることを区別するために、ブール値のアイデアを紹介するのはここかもしれません。

于 2012-12-19T06:18:54.147 に答える