2

AsyncTask を起動するサービスを実装したいと考えています。

AsyncTask onProgressUpdate() では、メイン スレッドで TableLayout を更新したいと考えています。

すべて問題ありませんが、1 つ疑問があります。
サービスは stopSelf() まで継続され、これが私が望むものです。
しかし、AsyncTask は TableLayout を更新しないことをどのようにして知るのでしょうか?

4

2 に答える 2

0

OK、あなたの2番目の投稿を読んだとき、私は物事をよりよく理解しています。

ここでは、古典的な生産者/消費者問題があります。サービスのAsyncTaskは、コンシューマー(メインアクティビティ)が表示する必要のあるものを生成しています。解決策は、LinkedBlockingQueueを使用してダウンロードしたすべてのアイテムを保存することです。アクティビティには、LinkedBlockingQueueからポーリングする独自のAsyncTaskが必要です。基本的なアプローチは次のとおりです。

このサービスには、データをダウンロードするAsyncTaskがあります。各アイテムは無制限のLinkedBlockingQueueに保存されます。

アクティビティはonResumeからAsyncTaskを開始し、onPauseからキャンセルします。このタスクは、LinkedBlockingQueueをポーリングしてから、TableLayoutに各アイテムを表示します。

于 2012-05-30T20:46:08.230 に答える