【问题标题】:How to cancel a HttpRequest in Android如何在 Android 中取消 HttpRequest
【发布时间】:2012-07-11 02:13:09
【问题描述】:

我有一个用于整个应用程序的线程安全 HttpClient,我有一个服务和一个活动,它们在不同的线程中非常频繁地进行各种 REST API 调用。 有时我需要取消已启动的 HttpRequest,因为我已经需要使用更新的数据启动另一个。 我不想让用户等待第一个请求完成,然后等待第二个,也许此时用户会再次更新数据,我需要调用第三个请求。 所以我想做的是用旧数据取消请求并开始一个新数据。我尝试取消 AsyncTask,但由于某种原因它没有取消已启动的请求。这是我的代码:

if (getAlbumImage != null && getAlbumImage.getStatus() == AsyncTask.Status.RUNNING) {
    Log.d(VibesApplication.VIBES, "cancelling image loader");
    getAlbumImage.cancel(true);
}
getAlbumImage = new GetAndSetAlbumImage();
getAlbumImage.execute(performer, name);

我还尝试关闭连接管理器。如此处建议:https://stackoverflow.com/a/7311393/1032286 但是我只有一个客户和经理,我不想每次进行 REST 调用时都创建它们。 我应该怎么办?如果有办法取消所有正在运行的请求,我会很高兴,但如果有办法取消单独的请求,那就太好了。

【问题讨论】:

标签: java android httpclient


【解决方案1】:

试试yourHttpRequest.abort()

HttpGetHttpPost 都实现了 AbortableHttpRequest 并且它有 abort() 方法

http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html

【讨论】:

    【解决方案2】:

    取消异步任务只会将任务的 IsCanceled 标志设置为 true。如果您希望停止后台任务,则必须在 runInBackground 函数的基本不同里程碑中明确检查 IsCanceled 标志。我记得以前遇到过这个问题,但找不到停止 HTTPRequest 的明确方法。我所做的是我基本上忽略了第一个 AsyncTask 并启动了一个新的。由于第一个任务被取消,每当它完成运行时,我只需通过检查 IsCanceled 标志来丢弃信息。

    【讨论】:

    • 丢弃更改是可以的,但请求需要时间、电池、3g 流量等
    猜你喜欢
    • 2016-07-29
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多