2011-02-04 17 views
10

En mi aplicación descargando montones de archivos desde la web estaban alrededor de 200Mb de archivos (comprimidos). Entonces, ¿alguien puede decirme la mejor manera de descargar archivos? En realidad, mi preocupación es sobre el rendimiento del código. Por favor, dame una idea o algún código si es posible para descargar. Cómo manejar errores y problemas de red en el medio.¿Cuál es la mejor manera de descargar archivos desde la red programáticamente en android?

Agradeciendo, Srinivas

Respuesta

15

Aquí hay un código que escribí recientemente sólo por eso:

try { 
     URL u = new URL("http://your.url/file.zip"); 
     InputStream is = u.openStream(); 

     DataInputStream dis = new DataInputStream(is); 

     byte[] buffer = new byte[1024]; 
     int length; 

     FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/" + "file.zip")); 
     while ((length = dis.read(buffer))>0) { 
     fos.write(buffer, 0, length); 
     } 

    } catch (MalformedURLException mue) { 
     Log.e("SYNC getUpdate", "malformed url error", mue); 
    } catch (IOException ioe) { 
     Log.e("SYNC getUpdate", "io error", ioe); 
    } catch (SecurityException se) { 
     Log.e("SYNC getUpdate", "security error", se); 
    } 

Esta descarga el archivo y lo pone en su sdcard.

Probablemente pueda modificar esto para satisfacer sus necesidades. :)

+0

Creo que el búfer de 1024 (1K) bytes no es la "mejor manera"? 1500 es mejor, también probé 5000 y fue más rápido. – Derzu

+0

Creo que 4096 es mejor –

+0

Oye, ¿funcionará también para los archivos de video? –

2

Me gustaría señalar que Android 2.3 (Nivel de API 9) introduce un nuevo servicio de sistema llamado DownloadManager. Si estás bien con solo soportar 2.3, definitivamente deberías usarlo. De lo contrario, puede:

  1. Compruebe si el DownloadManager está disponible y úselo si lo está. Si no es así (Android < 2.3), descárguelo usted mismo, por ejemplo, como lo describe xil3. No use DownloadManager, si cree que es demasiado trabajo Sin embargo, creo firmemente que se beneficiará de su uso.
+0

DownloadManager está totalmente deshecho para que los desarrolladores trabajen con él. Tendrá más problemas que beneficios si lo usa para algo más que solo 1 actividad y 1 archivo para descargar – Sever

+0

Hola, ¿puede DownloadManager manejar cosas como interrupción de descarga, descarga de currículum, descarga programada, descarga de múltiples archivos? He intentado con DownloadManager por un tiempo, pero solo puedo descargar 1 archivo a la vez, y cuando la descarga es interrumpida, tengo que volver a descargar todo. Gracias –

Cuestiones relacionadas