首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AsyncTask中同步

在AsyncTask中同步
EN

Stack Overflow用户
提问于 2014-01-22 01:47:45
回答 1查看 893关注 0票数 0

我有一个带有字段“沙丁鱼”的AsyncTask,在doInBackground()中我调用sardine.put(...)进行网络操作并运行synchron。现在,当它运行时,我需要能够在AsyncTask的公共方法中调用sardine.abort()。我读到我应该在( this )上做一个同步的块,但我不确定这样做的后果,现在我做以下操作:

代码语言:javascript
复制
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,但我认为这无关紧要。

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 01:51:15

使用AsyncTaskLoader和LoaderManager。然后就可以调用Loader.cancelLoad了。

http://developer.android.com/reference/android/content/AsyncTaskLoader.html

如果您不想这样做,那么在AsyncTask上使用cancel(true)将中断它。您不需要任何同步的块或任何新的线程。只需在后台方法中处理中断的异常即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21265474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档