簡體   English   中英

AsynTask確定何時完成

[英]AsynTask Determine When Finished

我想從一種方法返回一個布爾值,該方法將調用AsyncTask以執行命令以查找是否完成。 以前我調用了.get()方法(這很好),但是這會暫停所有線程,並且我需要進度對話框。

我正在玩一個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()然后再調用.get(),實際上允許UI生成我的進度對話框,同時等待.get(long timeout,TimeUnit timeUnit)中的布爾值。 這是解決我的問題的方法,但是如果有人對此發表評論,我將把問題一直待到明天。

要知道AsyncTask是否完成,最合適的位置是onPostExecute方法,該方法在doInBackground()執行之后被調用。 您可以根據背景活動的執行從doInBackground()返回一個Boolean變量。 當控件到達onPostExecute() ,可以確保您的后台活動已完成。

使用AsyncTask方式不合適,因為在對AsyncTask對象調用execute() ,控件將返回到下一行代碼。

將if(jData.theTask.getStatus()== AsyncTask.Status.FINISHED){}的內容移到onPostExecute()內部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM