2011-09-04 4 views
2

나는 abort()를 호출하고 execute()에서 블로킹하는 스레드는 예외가 발생하여 타임 아웃 될 때까지 블로킹을 해제하지 않습니다. 10 초 이상 걸릴 수 있으므로 큰 문제입니다.안드로이드 (2.1) HttpGet.abort()가 작동하지 않습니다.

저는 잠시 둘러 보았습니다.이 답변을 찾을 수 없습니다.

문서에서는 abort()가 execute() 블로킹 I/O를 즉시 차단 해제해야한다고 말합니다. 연구에 따르면이 문제는 오래 전에 해결되었다고합니다.

물론 다른 스레드에서 abort() 및 execute()를 호출합니다. 내 코드에는 특별한 것이 없기 때문에 공간을 낭비하지 않을 것입니다.

내가 찾은 일부 게시물은 HttpClient 아래에 소켓과 같은 것을 넣을 것을 제안했지만 그 중 아무 것도 작동하지 않았습니다.

답변

0

알려진 시간이 지나면 HttpGet이 시간 초과되기를 원하십니까? 아니면 가져 오기를 취소해야하는 이유가 있습니까? 나는 긴급 다운로드를 중단 할 때와 같이 응답 스트림을 읽은 후 중단 만 작동한다고 생각합니다. 독자적으로 읽기 및 연결 시간 제한을 설정할 수있는 HttpGet 대신 URLConnection을 사용할 수 있습니다.

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())); 
+1

제안 해 주셔서 감사합니다. 시간 제한이 필요하지 않습니다. 원하는 경우 사용자가 http 요청을 취소 할 수 있도록 허용하려고합니다. 문제를 해결했다고 생각합니다. 스레드가 I/O 호출에 있지 않을 때 중단됩니다.이 스레드는 TrustManager 생성자에 있습니다. https를 사용함에 따라 이는 의미가 있습니다. 더 자세히 살펴볼 것이지만이 문제는 실제 문제가 아니기 때문에 해결됩니다. Oopsies ... – Jin

+1

업데이트 : 예, 방금 키 스토어 init 코드를 execute()를 수행하기 전에 발생한 지점으로 옮겼습니다. abort()는 블로킹 I/O로 문서화 된대로 작동합니다. 유일한 문제는 키 스토어 초기화로 인해 앱이 느리게 시작되는 것입니다. 스플래시 화면이나 취소 할 수없는 진행 표시기가있는 것 같아요. – Jin