私はプログラミングに非常に慣れていないので、いくつか疑問があります。
とAsyncTask
呼んでいる がありRunInBackGround
ます。
そして、私はこのプロセスを次のように開始します:
new RunInBackGround().execute();
しかし、コードの他のステートメントに進む前に、この呼び出しの実行が完了するまで待ちたいと思います。
どうやってやるの?
方法はありますか?
私はプログラミングに非常に慣れていないので、いくつか疑問があります。
とAsyncTask
呼んでいる がありRunInBackGround
ます。
そして、私はこのプロセスを次のように開始します:
new RunInBackGround().execute();
しかし、コードの他のステートメントに進む前に、この呼び出しの実行が完了するまで待ちたいと思います。
どうやってやるの?
方法はありますか?
この呼び出しの実行が終了するまで待ちます
結果を取得するためにAsyncTask.get()メソッドを呼び出し、doInBackground
実行が完了するまで待機する必要があります。ただし、 Thread 内で get メソッドを呼び出さないと、メイン UI スレッドがフリーズします。
UI スレッドで結果を取得するには、次のように開始AsyncTask
します。
String str_result= new RunInBackGround().execute().get();
コードを並列に実行できれば理想的ですが、単純にスレッドを使用している場合は、アプリの使用フローがそれを待たなければならない場合でも、UI スレッドをブロックしないようにすることができます。
ここにはほとんど 2 つのオプションがあります。
AsyncTask 自体で、待機したいコードを実行できます。UI(スレッド)の更新に関係する場合は、 onPostExecute メソッドを使用できます。これは、バックグラウンド作業が完了すると自動的に呼び出されます。
何らかの理由で Activity/Fragment/Whatever でそれを行う必要がある場合は、AsyncTask からブロードキャストするカスタム リスナーを作成することもできます。これを使用することで、Activity/Fragment/Whatever に、必要なときにのみ呼び出されるコールバック メソッドを含めることができます。つまり、AsyncTask が待機しなければならなかった処理が完了したときにのみ呼び出されます。
AsyncTask
次のような ProgressDialog を 1 つ追加します。
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
onPreExecute()
次のようなメソッドでメッセージを設定できます。
this.dialog.setMessage("Processing...");
this.dialog.show();
そしてあなたのonPostExecute(Void result)
方法であなたを却下しますProgressDialog
。