0

AsyncTask を呼び出して終了したかどうかを確認するために実行するメソッドからブール値を返したいと考えています。以前は .get() メソッドを呼び出しましたが (これは問題ありませんでした)、これによりすべてのスレッドが停止し、進行状況ダイアログが必要です。

100msごとにスリープ/待機し、getStatus()をチェックしてStatus.FINISHEDと等しいかどうかを確認するforループのアイデアをいじっていますが、これは悪い考えのようです。

以下はコードの一部です。

  jData.theTask.execute(url);


  if(jData.theTask.getStatus() == AsyncTask.Status.FINISHED) {
      if(!WebService.webServiceValid()) {
             showMessage();
             return false;
         }

      return true;
  }


  Log.d("fired", "false fired");
  return false;

操作はすぐには完了しないため、false が返されるだけで、操作が完了していないために競合状態が発生しています。上記のように、for ループでラップして定期的に x 回チェックすることもできますが、おそらくもっと良い解決策があると思います。

どうもありがとう

編集:

.execute() を呼び出してから .get() を呼び出すと、.get(long timeout, TimeUnit timeUnit) からのブール値を待っている間に、UI が進行状況ダイアログ ボックスを実際に生成できるようです。これは私の問題の解決策ですが、これに関して誰かがコメントした場合に備えて、明日まで質問を開いたままにします.

4

2 に答える 2

1

AsyncTask が完了したかどうかを知る最も適切な場所は、実行onPostExecute後に呼び出されるメソッドです。doInBackground()できることは、バックグラウンド アクティビティの実行に基づいてBoolean変数を返すことです。doInBackground()コントロールが到達onPostExecute()すると、バックグラウンド アクティビティが完了したことが保証されます。

AsyncTaskオブジェクトでを呼び出した後、コントロールが次のコード行に戻るため、 の使用方法はexecute()不適切AsyncTaskです。

于 2012-07-18T13:05:00.680 に答える
0

if(jData.theTask.getStatus()==AsyncTask.Status.FINISHED) {} ブロックの内容を onPostExecute() 内に移動します

于 2012-07-18T13:32:32.977 に答える