2011-02-05 17 views
5

Así que tengo que cargar varias imágenes a un servidor web. Tengo el método de carga creado. Ahora necesito una forma de crear una cola de carga para poder administrar y cancelar las cargas. ¿Cuál es la mejor manera de hacer algo como esto? Definitivamente estaré ejecutando un servicio para esto. Estuve mirando la clase IntentService y me pareció una buena forma de hacer la cola (ya que solo necesito subir 1 archivo a la vez), pero mi carga consistirá en 3 partes, la primera parte a la que llamo servidor. obtener autorización, la segunda será la carga real y la tercera enviará una confirmación de que el archivo se envió con éxito.Creando una cola de carga

Bien, aquí está el trato. ¿Cómo cancelo una descarga específica en la cola? ¿Cómo pospongo la destrucción del servicio si el proceso está en la tercera parte de la carga (publicar la información de carga exitosa en un servicio web)?

Respuesta

3

¿Cómo puedo cancelar una descarga específica en la cola?

Con IntentService, no es así. Tendrá que escribir su propio Service que se comporte como IntentService (hilo de fondo, cola de trabajos, stopSelf() cuando la cola está vacía), pero donde puede administrar mejor la cola.

¿Cómo posponer la destrucción del servicio si el proceso se encuentra en la tercera parte de la carga

Si está utilizando IntentService o en su propio IntentService -workalike, el servicio no será normalmente destruido hasta que no haya más trabajo por hacer.

Si le preocupa que Android cierre su servicio porque cree que ha estado en la memoria demasiado tiempo, use startForeground().

+0

Ok. claro. ¿Hay algún ejemplo que me pueda ayudar a crear un servicio como el que describes? – DArkO

+0

@DArkO: No tengo nada que coincida. – CommonsWare

+0

bien. no es un problema. usted ha sido de gran ayuda hasta ahora en cualquier caso. Gracias. – DArkO

0

Desde la API 11, un buen enfoque es utilizar un 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()