2011-09-27 22 views
10

Estoy escribiendo una aplicación para Android que permite a los usuarios explorar una lista de archivos y descargarlos. Para cada descarga, creé un hilo y descargué el archivo con una instancia HttpURLConnection (leyendo de la conexión en un ciclo while).Descarga de varios archivos simultáneamente en aplicaciones de Android

Este método funciona bien con una descarga activa. Pero cuando el usuario inicia más de uno, el rendimiento de descarga se reduce drásticamente. La mayoría de las veces, estas descargas paralelas consumen todo el ancho de banda y los usuarios no pueden navegar por los archivos (que usa otro HttpUrlConnection para cargar la lista de archivos).

¿Alguna sugerencia para refinar el sistema de descarga? Gracias.

P.S .: El método que los navegadores populares como Google Chrome y Firefox hacen parece bueno. Alguien sabe cómo funcionan?

+0

Se podría tratar de darle a la descarga enhebra una prioridad más baja. – vee

+0

¿Cómo es eso posible? – Sadjad

+0

Doc: http://developer.android.com/reference/java/lang/Thread.html#setPriority(int) Ejemplo: http://stackoverflow.com/questions/5198518/whats-the-difference -between-thread-setpriority-and -roid-os-process-setthrea – vee

Respuesta

7

Desgraciadamente, no conozco la forma de regular ciertas conexiones. Sin embargo, un enfoque práctico sería implementar una cola de descargas para controlar la cantidad de descargas simultáneas. En su caso, es probable que desee dejar solo 1 cosa descargar a la vez. Esto se puede implementar de diferentes maneras.

Aquí está una manera de hacerlo con manipuladores y un looper: http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/

Edición 1: Véase la observación de los ratones. Puede ser más inteligente tener un máximo de 2 subprocesos descargando a la vez.

+7

No recomendaría descargar solo una transmisión a la vez. El problema puede ocurrir si una secuencia es inaccesible, las descargas son lentas o tiene otro problema. Luego, todas las descargas deben esperar a que este finalice o se produzca un error. –

+1

@mice buen punto. – Ian

Cuestiones relacionadas