私はAndroidアプリケーションのメインスレッドからasynctaskを呼び出しています。しかし、非同期タスクが終了するまでメインスレッドを一時停止する必要があります。 誰かがこれを行う方法を提案できますか?Android:AsyncTaskが完了するまでメインスレッドを一時停止できますか?
編集:私はちょうどプログレスダイアログを追加し、メインスレッド
私はAndroidアプリケーションのメインスレッドからasynctaskを呼び出しています。しかし、非同期タスクが終了するまでメインスレッドを一時停止する必要があります。 誰かがこれを行う方法を提案できますか?Android:AsyncTaskが完了するまでメインスレッドを一時停止できますか?
編集:私はちょうどプログレスダイアログを追加し、メインスレッド
にネットワーク要求を実行できないように私は、AsyncTaskを使用する必要があります。
ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("please wait ");
は一つの方法は、あなたのAsyncTaskが実行されるまでダイアログを表示し、postExecute()
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(UserMessages.this);
dialog.setIndeterminate(true);
dialog.setMessage("Please Wait...");
dialog.setTitle("Loading Messages");
dialog.setCancelable(true);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Do your work
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
}
}
に却下
onPreExecute(){
progress.show();
}
からそれを表示しますあなたcannoタスクは、それがさらにコードを実装します終了したら、)tは、メインスレッドを一時停止していますが、この方法は、あなたがDoInBackground(に戻って結果をフェッチしますAsyncTask完了するまで待ってから
AsyncTask.get()
を使用することにより、それは結果だ生成することができます例えば
あなたは文字列を返すならば、
String result=AsyncTask.get();
でダイアログを閉じている
onPostExecute(){
progress.dismiss();
}
あなたがボレーライブラリの代わりに、非同期タスクを使用してAndroidの中でネットワーク要求を行うことができ、このようなあなたの方法を記述します。スレッドプールを作成し、メインスレッドの負荷を軽減します。 https://developer.android.com/training/volley/index.html
外部リソースへのリンクは奨励されていますが、リンクの前後にコンテキストを追加して、それはなぜそこにあるのですか?ターゲットサイトに到達できない場合や、永続的にオフラインになる場合は、常に重要なリンクの最も関連性の高い部分を引用してください。 [How to Answer](http://stackoverflow.com/help/how-to-answer)から。 –
あなたがそれをしたいのであれば、なぜあなたは 'AsyncTask'を使用していますか? 'AsyncTask'のポイントは、何らかの作業をしているときにメインスレッドを一時停止しないことです。あなたもそれをしたいと思いますか?メインスレッドを一時停止することは避けてください。 –
これはネットワークリクエストです –
あなたは答えがちょっと変わった、メインスレッドからAsyncTaskを開始してメインスレッドを停止したいと思っています。なぜ別のスレッドを開始するのですか? – lubilis