我想从一个调用 AsyncTask 的方法返回一个布尔值来执行 if order 来查找它是否完成。以前我调用了 .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) 的布尔值时生成我的进度对话框。这是我的问题的解决方案,但是我将把这个问题留到明天,以防有人对此发表评论。