AsyncTask在完成时确定

时间:2012-07-18 12:58:16

标签: android asynchronous android-asynctask

我想要从调用AsyncTask的方法中返回一个布尔值,如果要查找它是否已完成。之前我调用了.get()方法(这很好),但这会停止所有线程,我想要一个进度对话框。

我玩弄了一个for循环的想法,睡眠/等待说每100毫秒,然后检查getStatus(),看看它是否等于Status.FINISHED,但这似乎是一个糟糕的主意

以下是一小部分代码。

  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()实际上允许UI在等待.get(long timeout,TimeUnit timeUnit)的布尔值时生成我的进度对话框。这是我的问题的解决方案,但是我将问题保持开放直到明天,任何人都对此有任何意见。

2 个答案:

答案 0 :(得分:1)

知道AsyncTask是否完成的最合适的地方是在onPostExecute执行后调用的方法doInBackground()。您可以做的是根据您的后台活动的执行情况从Boolean返回doInBackground()变量。当控件达到onPostExecute()时,您可以放心,您的后台活动已经完成。

您使用AsyncTask的方式不合适,因为在execute()对象上调用AsyncTask后,控件将返回到下一行代码。

答案 1 :(得分:0)

将if(jData.theTask.getStatus()== AsyncTask.Status.FINISHED){}块的内容移到onPostExecute()

里面