私はプログラミングの初心者で、いくつかの疑問を持っています。
私はAsyncTask
を持っていて、それをRunInBackGround
として呼んでいます。
そして、このプロセスを次のように開始します。
new RunInBackGround().execute();
しかし、この呼び出しの実行が終わるまで待ってから、他のコードの記述に進みたいと思います。
どのようにすればよいのでしょうか?
何か方法はありますか?
このコールの実行が終了するまで待つ
結果を取得するためには、AsyncTask.get()メソッドを呼び出し、doInBackground
の実行が完了しないまで待つ必要があります。
UIスレッド**で結果を取得するには、AsyncTask
を.NETで起動します。
String str_result= new RunInBackGround().execute().get();
コードが並行して実行されるのが理想的ですが、アプリの使用フローがUIスレッドを待たなければならない場合でも、UIスレッドをブロックしないように単純にスレッドを使用する場合もあります。
ここでは2つの選択肢があります。
1.1.待機させたいコードをAsyncTask自体で実行する。UI(スレッド)の更新に関係するものであれば、onPostExecuteメソッドを使用できます。これはバックグラウンドの作業が終わったときに自動的に呼び出されます。
2.2. 何らかの理由でアクティビティ/フラグメント/その他で行う必要がある場合は、カスタムのリスナーを作成して、AsyncTaskからブロードキャストすることもできます。これを使えば、AsyncTaskの処理が終わったときなど、必要なときだけ呼び出されるコールバックメソッドをActivity/Flagment/Whateverに用意することができます。
AsyncTask`の中に、ProgressDialogを1つ追加します。
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
onPreExecute()メソッドで次のようにしてメッセージを設定できます:
this.dialog.setMessage("Processing...");
this.dialog.show();
また、onPostExecute(Void result)
メソッドでは、ProgressDialog
を解除します。