20

私のアプリではAsyncTask、Android チュートリアルで提案されているように、いくつかの集中的な作業を行ってProgressDialogおり、メインのアクティビティに次のように表示しています。

dialog = ProgressDialog.show(MyActivity.this, "title", "text");
new MyTask().execute(request);

その後、MyTask結果をアクティビティに投稿します。

class MyTask extends AsyncTask<Request, Void, Result> {

    @Override protected Result doInBackground(Request... params) {
        // do some intense work here and return result
    }

    @Override protected void onPostExecute(Result res) {
        postResult(res);
    }
}

結果の投稿では、メインアクティビティでダイアログを非表示にします:

protected void postResult( Result res ) {
    dialog.dismiss();
    // do something more here with result...
}

したがって、ここではすべて正常に動作していますが、何らかの形で進行状況ダイアログを更新して、ダミーの「お待ちください...」メッセージの代わりに実際の進行状況をユーザーに表示できるようにしたいと考えています。MyTask.doInBackgroundすべての作業が完了したから進行状況ダイアログに何らかの方法でアクセスできますか?

私が理解しているように、それは別のスレッドとして実行されているため、そこからメインアクティビティと「話す」ことはできませんonPostExecute。そのため、結果をプッシュして戻します。しかし、問題は、onPostExecuteすべての作業が既に完了しているときにのみ呼び出され、何かをしている最中にダイアログの進行状況を更新したいということです。

これを行う方法のヒントはありますか?

4

2 に答える 2

42

AsyncTaskにはonProgressUpdate(Integer...)、たとえば、各反復を呼び出すことができるメソッド、またはをdoInBackground()呼び出すことによって進行が行われるたびに呼び出すことができるメソッドがありますpublishProgress()

詳細については、ドキュメントを参照してください

于 2011-01-04T08:52:46.827 に答える