¿Cuál es la mejor manera de implementar una cola de descarga en Android?Cola de descarga en Android
Sospecho que podría haber algunas clases de plataforma que podrían hacer la mayor parte del trabajo.
¿Cuál es la mejor manera de implementar una cola de descarga en Android?Cola de descarga en Android
Sospecho que podría haber algunas clases de plataforma que podrían hacer la mayor parte del trabajo.
¿Cuál es la mejor manera de implementar una cola de descarga en Android?
Usa un IntentService
. Proporciona la cola y el hilo de fondo para usted, por lo que todo lo que tiene que hacer es poner su lógica de descarga en onHandleIntent()
. See here for a sample project demostrando esto.
Yo sugeriría mirar el paquete java.util.concurrent y más específicamente en Executors
Se puede crear un ExecutorService que sólo iría en 'n' número de objetos Runnable a la vez y de forma automática gustaría Cola el resto de las tareas. Una vez que uno de los hilos ejecutados finaliza la ejecución, recoge el siguiente objeto ejecutable en cola para su ejecución.
El uso de IntentService dificultará la cancelación. Es algo de lo que debes estar consciente. Si puede, es API Level 9, será mejor que use http://developer.android.com/reference/android/app/DownloadManager.html
¿DownloadManager descarga los archivos en cola? –
Desde la API 11 en adelante, un buen enfoque es usar FixedThreadPool con tareas asincrónicas. Hacer una vez:
ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3);
Donde 3 es el número de descargas que desea ejecutar al mismo tiempo. Pondrá en cola la tarea si ya hay 3 descargas ejecutándose, y automáticamente manejará la tarea más tarde. poner en marcha sus tareas asíncronas con:
yourAsynTask.executeOnExecutor(threadPoolExecutor, params);
Parámetros es probablemente la URL que desea conectarse. Puede leerlo en el onPostExecute de su asynctask, y conectarse al servidor usando un HttpURLConnection.
Asegúrate de que llamar por este en el apagado:
threadPoolExecutor.shutdown()
increíble! Gracias CommonsWare! – hpique
Hello Commonsware, el ejemplo anterior no es una cola de descarga. es solo descargar la imagen en segundo plano. ¿Qué pasa si tengo 20 imágenes para descargar? –
@chrish: "El ejemplo anterior no es una cola de descarga" - sí, lo es. Solo lo invoco una vez. "¿Qué pasa si tengo 20 imágenes para descargar?" - llame 'startService()' 20 veces, cada uno con la información necesaria para que 'IntentService' sepa qué descargar. Mientras un comando está procesando, los otros harán cola dentro de 'IntentService', esperando su turno. Si desea tener una cola de descarga con múltiples hilos trabajando fuera de la cola, cree su propio 'Servicio' que use un' ThreadPoolExecutor' y llame 'stopSelf()' cuando la cola se vacíe. – CommonsWare