Creación de una cola de carga

Así que necesito subir varias imágenes a un servidor web. Tengo el método de carga creado. Ahora necesito una forma de hacer una cola de carga para poder administrar y cancelar las subidas. ¿Cuál es la mejor manera de hacer algo como esto? Voy a defenetly estar ejecutando un servicio para esto. Estaba mirando por encima de la clase IntentService y parece una buena manera de hacer la cola (ya que solo necesito subir 1 archivo a la vez), pero mi subida consistirá en 3 partes- la primera parte que estoy llamando a un servidor Obtener la autorización, el segundo será la carga real y el tercero será el envío de una confirmación de que el archivo se envió con éxito.

Ok, así que aquí está el trato. ¿Cómo puedo cancelar una descarga específica en la cola? ¿Cómo puedo posponer la destrucción del servicio si el proceso está en la tercera parte de la subida (publicar la información de subida con éxito a un webService)?

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

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

¿Cómo puedo posponer la destrucción del servicio si el proceso está en la tercera parte de la subida

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

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

Desde la API 11 hasta, un buen enfoque es utilizar un FixedThreadPool con tareas asíncronas. Haga una vez:

 ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

Donde 3 es el número de descargas que desea ejecutar al mismo tiempo. Se pondrá en cola la tarea si ya hay 3 descargas en ejecución y automáticamente se encargará de la tarea más tarde. Inicie las tareas asíncronas con:

 yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

Params es probablemente la URL a la que desea conectarse. Puede leerlo en el onPostExecute de su asynctask, y conectarse al servidor usando una HttpURLConnection .

Asegúrese de llamar a esto en el apagado:

 threadPoolExecutor.shutdown() 
  • Cómo publicar videos grandes en un servidor, en Android?
  • Retrofit 2 Método RequestBody writeTo () llamado dos veces
  • No se puede tomar el progreso en la carga de archivos POST HTTP (Android)
  • Picasso para cargar matriz de bytes
  • ¿Hay alguna forma de obtener el progreso de subida correctamente con HttpUrlConncetion?
  • ¿Es mejor usar AsyncTask o Service para cargar un archivo en segundo plano?
  • SingleCursorHandlerTouchEvent -getEditableSupport FASLE error
  • Descarga de archivos de Android mediante HTTP PUT
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.