我想要從調用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