InputStream no se cerrará, o tardará una

Estoy intentando descargar un mp3 externo en el almacenamiento interno. Sin embargo, los archivos que estoy intentando descargar son grandes, por lo que estoy tratando de descargarlos en fragmentos de 1 MB para que pueda empezar a jugar mientras se descarga el resto. Aquí está mi código de flujo:

InputStream is = null; OutputStream os = null; try { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet( url ); HttpResponse response = client.execute( get ); MyLog.d( "Connection established" ); byte[] buffer = new byte[8192]; is = new BufferedInputStream( response.getEntity().getContent(), buffer.length ); os = openFileOutput( filename, MODE_PRIVATE ); int size; int totalSize = 0; while (( size = is.read( buffer ) ) != -1 && totalSize < 1048576) { os.write( buffer, 0, size ); totalSize += size; } MyLog.d( "Finished downloading mix - " + totalSize + " bytes" ); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if ( os != null ) { try { os.flush(); os.close(); } catch (IOException e) { MyLog.e( "Failed to close output stream." ); } } if ( is != null ) { try { is.close(); } catch (IOException e) { MyLog.e( "Failed to close input stream." ); } } } 

Descarga el archivo bien, pero cuando llega a is.close () en la sentencia finally, se bloquea. Si espero un tiempo realmente largo que va a cerrar. Parece que todavía está descargando el resto del archivo. ¿Cómo evito esto y cierro la corriente inmediatamente?

    Con HTTP, normalmente todavía tienes que leer (y tirar) todo el resto del flujo de respuestas – no puedes cerrarlo. Se debe consumir todo el flujo. No estoy seguro si el httpclient de Android está basado en commons httpclient 3 o 4 – con 4 puedes usar HttpUriRequest # abort () para terminar antes. No estoy seguro si 3 tiene tal opción

    Edit: Miró hacia arriba y parece httpclient 3, y puede hacer httpget.abort ()

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.