我调用abort(),在execute()中阻塞的线程直到异常超时才释放。这可能需要10秒钟以上,所以这是一个大问题。

我环顾了一段时间,找不到答案。

文档说,abort()应该导致execute()阻塞I / O立即解除阻塞。研究表明,此问题已在不久前解决。

我当然是从不同的线程调用abort()和execute()。我的代码没有什么特别的,因此我不会浪费列出它的空间。

我发现一些帖子建议弄乱Socket和HttpClient下面的套接字,但这些都不起作用。

最佳答案

您是否只是想让HttpGet在已知的时间后超时,还是有原因为什么您必须尝试取消获取?我怀疑中止只有在它具有要读取的响应流之后才起作用...就像中止长时间下载一样。您可以尝试使用URLConnection而不是HttpGet,它允许您独立设置读取和连接超时。

URL url= new URL(urlString);
        URLConnection conn = url.openConnection();
        conn.setConnectTimeout(getInstance().getConnectionTimeout());
        conn.setReadTimeout(getInstance().getReadTimeout());
        if (encodedPostargs != null)
        {
            conn.setDoOutput(true);
            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
            out.write(encodedPostargs);
            out.flush();
            out.close();
        }
        return new BufferedReader(new InputStreamReader(conn.getInputStream()));

关于android - Android(2.1)HttpGet.abort()无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7301272/

10-11 22:37
查看更多