0
我在doInBackground()中有一個名爲「sardine」的字段的AsyncTask,我調用sardine.put(...),它使網絡操作和運行同步。現在,在運行時,我需要能夠在AsyncTask的公共方法中調用sardine.abort()。我讀了我應該做的(這)一個synchronized塊,但我不知道的這樣的後果,我現在做如下:在AsyncTask中同步
public class AsyncWebDavUploadFile extends AsyncTask<Void, Long, Integer> {
private SardinePatched sardine;
@Override
protected Integer doInBackground(final Void... params) {
...
sardine = new Sardine...
sardine.put(urlString, fileInputStream, mimeType, file.length(), true);
...
return result;
}
public void stopUplaod() {
new Thread(new Runnable() {
@Override
public void run() {
if (sardine != null) {
synchronized (sardine) {
sardine.abort();
}
}
}
}).start();
}
...
}
「sardine.put」做的「 AbstractHttpClient.execute「和sardine.abort做了一個HttpRequestBase.abort,但我不認爲這個問題。
它可能工作,但我想知道使用AsyncTask的解決方案 – David
您應該能夠調用異步任務的取消方法,這應該導致沙丁魚得到一個可以處理的中斷異常。你不需要後臺線程來做到這一點。但是如果你提供了關於這個「沙丁魚」和「中止」方法的更多細節,會更好。 –
沙丁魚是用於製作WebDav請求並中止連接的庫。調用取消不起作用,因爲一旦在doInBackground中任務沒有被取消,取消只會避免任務啓動,或者如果已經開始,則不調用onPostExceute – David