私は、いくつかのWebサービスにアクセスし、情報が表示される複数のアクティビティを持つアプリケーションのための最も良い一般的なデザインが何かを理解しようとしています。一般的なアプリケーション設計(IntentService/ContentProvider/AsyncTask)
最新のAndroidアプリケーションを実装した方法は次のとおりです。私はIntentService
を持っていて、ウェブサービスから情報を得るための活動からのリクエストを受け取ります。私のService
は、アクティビティにResultReceiver
を介してリクエストのステータス(開始/エラー/終了)を通知します。 Webサービスを呼び出し、結果(xml/json)を取得して解析した後、その情報をContentProvider
(sqliteデータベースでバックアップ)に入れ、ContentResolver
を使用して変更に関するすべてのアクティビティを通知します。アクティビティは変更について通知を受け取ります(ContentObserver
などを使用し、その他はSimpleCursorAdapter
を使用し、自動的に通知されます)。
さて、私のアプローチの問題点:
- 私が活動に入るたびに、私は、上記の方法でWebサービスから情報を要求し、私はそれを埋める、その特定のテーブル内のすべての行を削除します新しい情報と活動を通知します。だから、ユーザーが押してから再び入ると、私はダンス全体をもう一度やります。私はデータベースにいくつかのフィールドを追加するべきだと思います。最終更新日はいつですか?しかし、それをどのように正確に進めるか分かりません。提案? 1つの選択肢は、特定の間隔でアラームを使用してアップデートをトリガすることです。しかし私の場合、仕様書はアクティビティに入るたびにWebサービスをチェックするように求めています。
- 私はWebサービスを呼び出すと、他のビュー(以前に取得された情報を含み、Webサービスコールが終了するまでデータベースに格納されている)上で不確定な進行状況バーをアクティビティに表示しますが、ビューとこれは良いではありません(情報は、データベースから消えるかもしれません)。インタラクションを無効にする方法はありますか? ProgressDialogが気になります。
- 異なるアクティビティをすばやく移動すると、IntentServiceが以前のWebサービスコールでブロックされ、最新のWebサービスコールにアクセスするのに時間がかかります。すべてのWebサービスに対して複数の
IntentService
を作成することができましたが、これはその目的ではないと思います。
私が取ったアプローチは、実際にこの特定のアプリケーションにとって最高のものではないと感じています。それは部分的に Google I/Oアプリケーション(私は更新されたsqliteフィールドなど、すべてを理解することができませんでした)からインスピレーションを受けています。 1つの選択肢は、すべてのアクティビティでAsyncTasksを使用することでした。しかし、他の活動からアクセスするために情報をどこに保管できますか? Application
のリストにありますか? ID管理はどうですか?
私はあなたの意見/アイデア/提案に本当に関心があり、次のアプリケーションをより効率的かつ効率的に機能させるにはどうすればいいですか?
これまで私がプレゼンテーションを見てきましたが、開発中に影響を受けました。しかし、十分に自信を持っていないので、私は一生懸命に行きませんでした。このアプローチに関する詳細な実装の詳細を確認できれば助かります。他のオープンソースのAndroidアプリケーションをお勧めしますか?ありがとう。 –
オープンソースの例も見つけられなかったので、私は最初から再実装しなければなりませんでした。彼らが話していることの例を提供していないのは間違いです... – fedepaol