У меня есть AsyncTask с полем «sardine», в doInBackground() Я вызываю sardine.put (...), который выполняет сетевые операции и запускает синхронизацию. Теперь, когда это выполняется, мне нужно иметь возможность вызвать sardine.abort() в общедоступном методе AsyncTask. Я читал, что я должен делать синхронизированный блок на (это), но я не уверен, что из последствий этого, теперь я делаю следующее:Синхронизировано в 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
Вы должны просто вызвать метод отмены задачи async, что должно привести к тому, что сардин получит прерывистое исключение, которое вы можете обработать. Для этого вам не нужен фоновый поток. Но было бы лучше, если бы вы предоставили более подробную информацию об этом методе «сардин» и «прервать». –
sardine - это библиотека, используемая для создания WebDav Request and abort, прерывает соединение. Вызов отмены не работает, потому что один раз в doInBackground Задача не отменяется, отмена только позволяет избежать запуска задачи или, если она уже запущена, то onPostExceute не вызывается – David