我有一个带有字段“沙丁鱼”的AsyncTask,在doInBackground()中我调用sardine.put(...)进行网络操作并运行synchron。现在,当它运行时,我需要能够在AsyncTask的公共方法中调用sardine.abort()。我读到我应该在( this )上做一个同步的块,但我不确定这样做的后果,现在我做以下操作:
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,但我认为这无关紧要。
发布于 2014-01-22 01:51:15
使用AsyncTaskLoader和LoaderManager。然后就可以调用Loader.cancelLoad了。
http://developer.android.com/reference/android/content/AsyncTaskLoader.html
如果您不想这样做,那么在AsyncTask上使用cancel(true)将中断它。您不需要任何同步的块或任何新的线程。只需在后台方法中处理中断的异常即可。
https://stackoverflow.com/questions/21265474
复制相似问题