2012-03-26 10 views
0

イントロ:私は3つのアクティビティ、DashBoard,FeedおよびEventsを持っています。 DashBoardは、アプリケーションの起動時に起動されます。そこから、ユーザーはフィードまたはイベントに移動できます。別のアクティビティでアクセスする別個のダウンローダクラス(別スレッド)

問題DashBoardが起動したときにダウンロードを開始したい(もちろん別のスレッドで)。そこからユーザはFeedまたはEventsに移動でき、ダウンロードは進行中であるか、すでに終了しています。アクティビティFeedまたはEvent(インスタンスではこれでも適切です)にダウンロードが完了し、データが利用可能であることを通知する必要があります。これを達成する最良の方法は何ですか?

私の現在のコード:私は、アクティビティによって開始されるダウンローダクラスDownloadHandlerを持っています。このクラスは別のスレッドでダウンロードされます。クラスはcompletedというブール値を追跡します。これはfalseにインスタンス化され、ダウンロードが完了するとtrueに変更されます。

現在のところ、私のクラスFeedまたはEventsは、別のスレッドで変数completedを100msごとにポーリングして、UIスレッドをブロックしないようにします。 completedの変数がtrueになると、その特定のクラスの関数を呼び出し、DataHandlerクラスにダウンロードしたデータを問い合わせます。


これは機能しますが、私のロジックは少し厄介であり、それを行うには良い方法がなければならないような気がします。私は2つの別々のスレッドを使用しています.1つはダウンロード用、もう1つは完成した変数をポーリングするためです。これを行うより良い方法はありますか?

私はAsyncTaskと異なるコールバックを読みましたが、問題は特定のクラスでコールバックを指定できないことです。ダウンロードが完了すると、現在のアクティビティはDashBoard,EventsまたはFeedsになる可能性があります。ダウンロードが完了したときにどのアクティビティが前面に表示されるかは保証されません。

+1

https://github.com/rajeshcp/Android-Download-Managerこれは基本的にはアプリケーション内のすべてのhttp呼び出しを処理する単一トンクラス(DownloadManager)です。これは、私が多くのアプリケーションで使ったのと同じことです。 – Triode

+0

ダウンロードマネージャのクラスは、私が必要とするものではありません。私はすでにダウンロードマネージャクラスを持っています。私は、どのアクティビティが開いているかに応じて、仕上げを関数に戻すことができるようにする必要があります。 –

答えて

1

私は、ダウンロードスレッド(インテントフィルタを設定する)とフィードとイベントに登録レシーバ(onStop()で登録解除するのを忘れないでください)のブロードキャストを起動します。 私はこの目的のためにこのソリューションを頻繁に使います。

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
     } 
}; 

あなた自身で残りの部分を解決する必要があります。それは難しくありません。それにはたくさんのツイートがあり、アンドロイドに入るための標準的な本を買う。

+0

は良いアイデアのように聞こえます。私に少しのコード例を教えてください。ちょうど概要。 Events and Feedsに放送受信機を登録する方法。私がインターネット上で見るすべての例は、別々のBroadcastRecieverクラスを使用しているからです。 –

+0

昨日は答えとして受け入れられたので...スマートな解決策は、抽象クラスを拡張するアクティビティと、この抽象クラスを拡張するフィードおよびイベントです。ダウンロードスレッドにリスナーを設定し、抽象アクティビティのonStartに登録する(onPauseで登録を忘れないでください)と、スマートジョブが実行されます。 しかし、ブロードキャストのアプローチも良い仕事をして、ダウンロードスレッドのライフサイクルについて何かを知る必要がないという利点があります。 –

+0

はい。私は実際にアクティビティとシングルトンダウンローダクラスを持つサブパブパターンを持っていました。あなたが言ったことと全体的に同じです。 –

関連する問題