Android (2.1) HttpGet.abort () не работает - PullRequest
       3

Android (2.1) HttpGet.abort () не работает

2 голосов
/ 04 сентября 2011

Я вызываю abort (), и поток, блокирующий в execute (), не разблокируется, пока не произойдет тайм-аут за исключением. Это может занять более 10 секунд, так что это большая проблема.

Я некоторое время осматривался и не могу найти ответ на этот вопрос.

В документах говорится, что abort () должен привести к немедленной разблокировке блокирующего ввода-вывода execute (). Исследования показывают, что эта проблема была исправлена ​​некоторое время назад.

Я, конечно, вызываю abort () и execute () из разных потоков. В моем коде нет ничего особенного, поэтому я не буду тратить впустую место, перечисляя его.

Некоторые сообщения, которые я нашел, предлагали возиться с сокетами и тому подобным под HttpClient, но ни один из них не работал.

1 Ответ

0 голосов
/ 04 сентября 2011

Вы просто хотите, чтобы 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()));
...