2016-06-16 14 views
-4

私はAndroidアプリケーションのメインスレッドからasynctaskを呼び出しています。しかし、非同期タスクが終了するまでメインスレッドを一時停止する必要があります。 誰かがこれを行う方法を提案できますか?Android:AsyncTaskが完了するまでメインスレッドを一時停止できますか?

編集:私はちょうどプログレスダイアログを追加し、メインスレッド

+1

あなたがそれをしたいのであれば、なぜあなたは 'AsyncTask'を使用していますか? 'AsyncTask'のポイントは、何らかの作業をしているときにメインスレッドを一時停止しないことです。あなたもそれをしたいと思いますか?メインスレッドを一時停止することは避けてください。 –

+0

これはネットワークリクエストです –

+0

あなたは答えがちょっと変わった、メインスレッドからAsyncTaskを開始してメインスレッドを停止したいと思っています。なぜ別のスレッドを開始するのですか? – lubilis

答えて

0

にネットワーク要求を実行できないように私は、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(); 
     } 


     } 
+0

これはメインスレッドを止めることはありません。これにより、画面上のユーザー対話がロックされます。たぶん問題は悪いですが、これは本当の答えです – lubilis

+0

実際にメインスレッドを止めているのは、ユーザーには何もできないことです。 – Gaurav

0

に却下

onPreExecute(){ 
     progress.show(); 
    } 

からそれを表示しますあなたcannoタスクは、それがさらにコードを実装します終了したら、)tは、メインスレッドを一時停止していますが、この方法は、あなたがDoInBackground(に戻って結果をフェッチしますAsyncTask完了するまで待ってから

AsyncTask.get() 

を使用することにより、それは結果だ生成することができます例えば

あなたは文字列を返すならば、

String result=AsyncTask.get(); 
1

でダイアログを閉じている

onPostExecute(){ 
    progress.dismiss(); 
} 
-1

あなたがボレーライブラリの代わりに、非同期タスクを使用してAndroidの中でネットワーク要求を行うことができ、このようなあなたの方法を記述します。スレッドプールを作成し、メインスレッドの負荷を軽減します。 https://developer.android.com/training/volley/index.html

+1

外部リソースへのリンクは奨励されていますが、リンクの前後にコンテキストを追加して、それはなぜそこにあるのですか?ターゲットサイトに到達できない場合や、永続的にオフラインになる場合は、常に重要なリンクの最も関連性の高い部分を引用してください。 [How to Answer](http://stackoverflow.com/help/how-to-answer)から。 –

関連する問題