4

多くのAPI呼び出しを必要とするAndroidアプリに取り組んでいます。IntentServiceに基づいてキューイングシステムを実装するシステムを構築しました。重要なのは、IntentServiceの実行中に正確なProgressBarの更新を表示したいということです。

1つの方法は、キューイングシステムを一連のAsyncTasksに変更することです。を使用して進捗状況を表示する必要がありonProgressUpdate()ます。

もう1つの方法は、IntentServiceを微調整し、バックグラウンドスレッドから進行状況を取得することです。

重要なのは、IntentServiceとAsyncTaskの優れた機能を組み合わせたいということです。UIイベントを簡単に処理するキューイングシステムを作成します。それを実装するための最良の方法はありますか?

編集: IntentServicesの代わりにAsyncTasksを使用することになりました。それでも、IntentServiceからの進捗状況を更新するために共有できる良いパターンがある場合は、コメントを追加してください。

4

2 に答える 2

2

私はしたい

  • HandlerThread と Handler を開始する
  • メイン UI スレッドのハンドラーを取得する
  • そのスレッドのハンドラーを使用してバックグラウンド スレッドに作業を投稿する
  • UI スレッドのハンドラーを使用して、進行状況の更新と結果を UI に投稿する

そうすれば、単一のバックグラウンド スレッドでワーク キューを処理し、ブロードキャストを処理することなく、好きなものを UI スレッドにポストすることができます。

于 2011-11-20T20:26:24.470 に答える
1

私と一緒に、IntentService の場合、プログレスバーをいつ開始し、いつプログレスバーを終了するかをブロードキャストすることを考えていました。通常、エンド部は定番の「レシーブバック」をご利用いただけます。異なる文字列を使用して、異なるインテント ブロードキャストを登録できます。

注意が必要な部分は、プログレス バーがキャンセルされたかどうかを呼び出しで確認する方法を見つけることでした。REST 呼び出しの進行に合わせて更新できるステータス テーブルを用意することを考えていました。テーブルには呼び出しの ID があり、完了後、エントリは削除されます。スレッドがアクティブである必要がある場合、テーブルは追跡します。

したがって、REST スレッドは各送信の前にテーブルをチェックし、キャンセルを検出した場合はすべてを停止し、データの返送を無視します。

于 2012-08-12T23:25:43.637 に答える