89

私はプログラミングに非常に慣れていないので、いくつか疑問があります。

AsyncTask呼んでいる がありRunInBackGroundます。

そして、私はこのプロセスを次のように開始します:

new RunInBackGround().execute();

しかし、コードの他のステートメントに進む前に、この呼び出しの実行が完了するまで待ちたいと思います。

どうやってやるの?

方法はありますか?

4

5 に答える 5

134

この呼び出しの実行が終了するまで待ちます

結果を取得するためにAsyncTask.get()メソッドを呼び出し、doInBackground実行が完了するまで待機する必要があります。ただし、 Thread 内で get メソッドを呼び出さないと、メイン UI スレッドがフリーズします

UI スレッドで結果を取得するには、次のように開始AsyncTaskします。

String str_result= new RunInBackGround().execute().get();
于 2013-02-12T07:35:23.560 に答える
38

コードを並列に実行できれば理想的ですが、単純にスレッドを使用している場合は、アプリの使用フローがそれを待たなければならない場合でも、UI スレッドをブロックしないようにすることができます。

ここにはほとんど 2 つのオプションがあります。

  1. AsyncTask 自体で、待機したいコードを実行できます。UI(スレッド)の更新に関係する場合は、 onPostExecute メソッドを使用できます。これは、バックグラウンド作業が完了すると自動的に呼び出されます。

  2. 何らかの理由で Activity/Fragment/Whatever でそれを行う必要がある場合は、AsyncTask からブロードキャストするカスタム リスナーを作成することもできます。これを使用することで、Activity/Fragment/Whatever に、必要なときにのみ呼び出されるコールバック メソッドを含めることができます。つまり、AsyncTask が待機しなければならなかった処理が完了したときにのみ呼び出されます。

于 2013-02-12T07:36:12.447 に答える
16

AsyncTask次のような ProgressDialog を 1 つ追加します。

private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);

onPreExecute()次のようなメソッドでメッセージを設定できます。

this.dialog.setMessage("Processing..."); 
this.dialog.show();

そしてあなたのonPostExecute(Void result)方法であなたを却下しますProgressDialog

于 2013-02-12T07:36:56.500 に答える