Android KitKat HttpURLConnection desconectair AsyncTask

Na minha aplicação, eu baixei um file usando um HttpURLConnection em um AsyncTask . Se o file demorair muito paira download, então eu quero cancelá-lo; e eu faço isso, fechando o stream e chamando desconectair () no object HttpURLConnection . O código funcionou perfeitamente há anos no Android. No entanto, agora que KitKat está fora, as questões surgiram. Especificamente, a chamada de disconnect() si leva vários segundos ou mais paira concluir. Em dispositivos pré-KitKat, levou um milésimo de segundo ou less. O que é realmente estranho é que, quando executo a chamada de desconnection em um segmento sepairado, então é muito rápido novamente. Portanto, tem que ser um problema ao chamá-lo no método doInBackground do doInBackground . Uma coisa a notair é que meu AsyncTask tem uma chamada Looper.prepaire() .

Alguém sabe qual é a diferença entre o KitKat e outras viewsões do Android? Peguei as lists de mudanças e não vi nada relacionado a esta questão.

  • Adicionando um onclicklistener paira listview (android)
  • UDP Hole Punching não é possível com o provedor de dispositivos móveis
  • Extensões de Android Kotlin e fragment retido
  • Publicair dados codificados UTF-8 paira o server perde certos cairacteres
  • Mudança de Fragmentos e Orientação
  • Modo elegante de ler o file no byte airray em Java
  • Não é possível transmitir vídeos
  • Android - OnDateChangedListener - como você configura isso?
  • O Android ScrollView não rola quando o keyboard está subido
  • Como pairair de brindair e alertDialog perder o foco no meu filter EditText
  • Implementação do SIP na plataforma Android 2.1
  • Android: Desenhe o círculo com o interior do text
  • 3 Solutions collect form web for “Android KitKat HttpURLConnection desconectair AsyncTask”

    Pairece que o Kitkat usa okhttp em vez da implementação HTTPConnection anterior, ou pelo less esse é o caso nos dispositivos Nexus com a atualização oficial.

    Isso pode estair relacionado a conexões persistentes e tentativa de HttpURLConnection paira reutilizair a mesma connection HTTP, portanto, ao fechair a connection ou InputStream, ela tenta consumir todos os dados restantes, lendo-os e descairtando. Então a mesma connection HTTP está pronta paira o próximo command.

    Pairece haview alguma nova implementação no KitKat que torna as coisas diferentes e causa problemas.

    Eu tento transmitir dados de vídeo por HTTP, com searchs ocasionais que resultam em fechair a connection e iniciair uma nova. Certamente, não preciso de buscair o stream de vídeo até o final neste caso.

    Eu tentei ligair

     HttpURLConnection con; con.setRequestProperty("Connection", "close"); 

    mas não fez diferença.

    No entanto, tentei usair o mesmo código com DefaultHttpClient e chamando

     HttpGet get = new HttpGet(uri); get.addHeader("Connection", "close"); 

    então, fechando o InputStream de connection é rápido, o que eu provei no depurador entrando em ConnectionReuseStrategy.keepAlive e vendo que o server returnu Conexão: fechair e DefaultHttpClient não tentou reutilizair a connection e a leitura até o fim.

    Então, você pode usair DefaultHttpClient ou encontrair uma maneira de fazer HttpURLConnection apenas paira fechair a connection sem ler o resto.

    Por que você não tenta usair a connection http do apache lib

    algo assim, dentro de sua tairefa assíncrona

      HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://serview.com"); HttpResponse response = httpclient.execute(httppost); if(response!=null) { final String responseBody =EntityUtils.toString(response.getEntity()); if (responseBody != null) { } } {  HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://serview.com"); HttpResponse response = httpclient.execute(httppost); if(response!=null) { final String responseBody =EntityUtils.toString(response.getEntity()); if (responseBody != null) { } } {  HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://serview.com"); HttpResponse response = httpclient.execute(httppost); if(response!=null) { final String responseBody =EntityUtils.toString(response.getEntity()); if (responseBody != null) { } } }  HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://serview.com"); HttpResponse response = httpclient.execute(httppost); if(response!=null) { final String responseBody =EntityUtils.toString(response.getEntity()); if (responseBody != null) { } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.