2010-12-01 14 views
8

私は、いくつかの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管理はどうですか?

私はあなたの意見/アイデア/提案に本当に関心があり、次のアプリケーションをより効率的かつ効率的に機能させるにはどうすればいいですか?

答えて

2

このトークをチェックしましたか? http://www.youtube.com/watch?v=xHXn3Kg2IQE

私はそれが良いインスピレーションの源であることがわかりました。 基本的には、シングルトンクラスとしてサービスヘルパー(あなたの場合は、インテントサービスへのサービスヘルパー)を構築することをお勧めします。進行中の要求を追跡できます

このようにして、実行中のさまざまな進行中のバックグラウンドタスクを追跡し、同じ種類の他の要求をブロックできます。たとえば、アクティビティaを残してアクティビティbを入力し、同じWebサービスクエリを要求した場合は、アクティビティaのために進行中であることを確認できます。

ioschedアプリで見たものから、アクティビティが終了するとフェッチ結果が失われるという問題があります。

言う明確なログがあります:

Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());

を、私は結果が同様に失われてしまうので、あまりにもasynctaskを使用することをお勧めしませんが。

ただし、トークとスライドをご覧ください。

+0

これまで私がプレゼンテーションを見てきましたが、開発中に影響を受けました。しかし、十分に自信を持っていないので、私は一生懸命に行きませんでした。このアプローチに関する詳細な実装の詳細を確認できれば助かります。他のオープンソースのAndroidアプリケーションをお勧めしますか?ありがとう。 –

+0

オープンソースの例も見つけられなかったので、私は最初から再実装しなければなりませんでした。彼らが話していることの例を提供していないのは間違いです... – fedepaol

関連する問題