web-dev-qa-db-ja.com

Google IO残りのデザインパターン、ContentProviderを終了し、ネットワークからのデータの取得に固執

このトピックに関する非常に有名なビデオを見た後、私はデザインパターンBを使用することにしました。servicehelperでcontentproviderを使用します。

google design pattern on rest

基本的に私は次のファイルを持っています:

  • MyProvider
  • MyDatabase
  • Mycontract

アクティビティでは、contentresolverを取得し、プロバイダーにクエリを実行できます。これまでのところ、すべてがうまく機能しています。

次に、コンテンツプロバイダーを同期してREST APIからデータをフェッチする必要があります。したがって、サービスヘルパーサービスとRestメソッドを実装する必要があります。Googleの調査IOアプリは私を大いに助けてくれました、私はAndroidの初心者なので、それを理解するのはまだ難しいです。

GoogleがRemoteHandlerを使用して外部データを処理しているのがわかりますが、これらは図のプロセッサクラスだと思いますか?

私が理解していないのは、ネットワークからデータを取得するためにservicehelper + serviceパーツを実装する方法です。

  • サービスヘルパーはどこに電話すればよいですか?
  • サービスとヘルパーは正確に何をする必要がありますか?
  • この正確なデザインパターンの良い例はありますか?

私はこれについてスタック上のいくつかのトピックを読みましたが、すべてが異なる方法を示唆しています。レストプロバイダーを宣言する例を見つけたので、myProviderはそのプロバイダーを拡張する必要があります。私はそれらのソリューションが好きではなく、この構造化されたデザインパターンに従いたいと思っています。

30
Sam

私の理解では、パターンは次のとおりです。

  • 空のアクティビティを表示せず、コンテンツをバックグラウンドでロードします。ロードに失敗すると、何も表示できなくなります。
  • 代わりに、コンテンツプロバイダーとアダプターを介してアクセス可能なデータベースに保存されているデータを表示します-これにより、ユーザーは常にコンテンツを見ることができます
  • バックグラウンドで新しいデータをフェッチします。データが電話に送信されると、アクティビティはアダプタを介して自動的に更新されます。

あなたの質問に(私は順序を変更しました):

サービスヘルパーはどこに電話すればよいですか?
VigilsトークからパターンAを選択します。その場合、呼び出しはアプリケーションによって異なります。アプリケーションの起動時、アクティビティの作成時、またはユーザーが更新ボタンを選択したときに、更新をトリガーできます。アクティビティの作成時に選択します。

パターンBを選択しました。その場合、コンテンツプロバイダーが更新をトリガーする必要があることは明らかです。いつ?新しいデータを取得する場合:作成時または最初の読み取りアクセス後。作成時間を使用します。作成、更新、削除については、コンテンツプロバイダーでの対応するアクションの後に行ってください。

この正確なデザインパターンの良い例はありますか?
私の投稿から https://stackoverflow.com/a/8693919/734687 :私が知っている唯一のオープンソースリファレンス実装は http:// datadroid .foxykeep.com 。独自のアプリケーションで使用できるライブラリです。アーキテクチャは/ presentationで説明されています-必ず読んでください。

サービスヘルパーは正確に何をする必要がありますか?
スライド19の slides を見ると、サービスへの呼び出しをカプセル化し、要求IDを介して非同期呼び出しを処理するシングルトンです。

サービスは正確に何をする必要がありますか?
サービス(プレゼンテーションのスライド17)は、アクションがバックグラウンドで実行されることを保証するだけです。

20
ChrLipp