Google I/Oセッションの提案を使用してソリューションを実装しましたが、これは本当にうまく機能しています。
リモートサーバーからデータを取得するには、サーバーが応答するのを待っている間にUIスレッドをブロックできないため、バックグラウンドスレッドは必須です。これを行う最も簡単な方法は、サーバからデータをdoInBackground
に取得したAsyncTaskを使用して、UIの更新やデータの保存をonPostExecute
で行う必要があります。このアプローチは、多くのユースケースで十分に機能しますが、Google I/Oセッションで対処していた問題は、サーバが応答するのを待っている間にアクティビティが中断された場合にデータを失うことでした。このセッションで提案されたソリューションは、データを保存してアクティビティに添付されていない方法で保存できるようにする方法の提案でした。
サービスを使用すると、データ取得をアクティビティから分離できます。 (ただし、サービスはUIスレッド上で実行されているため、データを取得するためにService内に個別のスレッドを作成する必要があります)ContentProviderは、サービスから情報を要求されたアクティビティに渡すときに機能しますサーバーデータ。データベースを使用してレスポンスを保存することができます。その後、アクティビティはデータベースから応答を取得できます。
SyncAdapterを使用すると、アプリケーションが必要なときに新鮮で準備が整うように、アプリが特にリクエストすることなく、失敗したサーバーコールを再試行したり、サーバーからデータを取得したりすることができます。もちろん、それはバッテリーをかなり枯渇させる可能性があるので、実際には非常に控えめに使用する必要があります。
少なくともService/ContentProviderのアプローチをお勧めします。私はそのソリューションを使用して、キャッシュメカニズムを簡単にアプリケーションに組み込むことができました。
希望に役立ちます。
サンプル実装を提供できますか? –
残念ながら、実装から実際のコードを共有することはできません。 – Aldryd