イントロ:私は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
になる可能性があります。ダウンロードが完了したときにどのアクティビティが前面に表示されるかは保証されません。
https://github.com/rajeshcp/Android-Download-Managerこれは基本的にはアプリケーション内のすべてのhttp呼び出しを処理する単一トンクラス(DownloadManager)です。これは、私が多くのアプリケーションで使ったのと同じことです。 – Triode
ダウンロードマネージャのクラスは、私が必要とするものではありません。私はすでにダウンロードマネージャクラスを持っています。私は、どのアクティビティが開いているかに応じて、仕上げを関数に戻すことができるようにする必要があります。 –