我想要从调用AsyncTask执行的方法返回一个布尔值,如果为了查找它是否完成而执行。以前我调用了.get()方法(这很好),但是这会暂停所有线程,我想要一个进度对话框。AsynTask确定何时完成
我玩弄了一个for循环的想法,每100ms睡眠/等待,然后检查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()则获得()实际上允许UI产卵我的进度对话框,同时等待。获得布尔(长超时,TimeUnit timeUnit)。这是解决我的问题的方法,但是我会让问题一直公开,直到明天再有人对此发表评论。
它是一个非常糟糕的做法是使用AsyncTask.get()。你实际上牺牲了AsyncTask的好处并且使得UI线程被阻塞并等待工作线程,因此不再是异步的。更糟糕的是,应用程序可能会抛出ApplicationNotRespondingException。你应该重构你的代码并在onPostExecute()回调方法中实现你需要的所有东西。 – yorkw 2012-07-19 01:52:33