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)?
- Android: Cómo deshabilitar la depuración para subir el apk
- Cargar un archivo a través de un formulario HTTP, a través de MultipartEntityBuilder, con una barra de progreso
- El progreso de la subida de OkHttp no está sincronizado con la subida real
- ¿Cómo grabar un video directamente en Helix Server desde mi dispositivo Android?
- MultipartEntity y Json
- Subir vídeo en twitter
- ¿Cómo subir videos a youtube en android?
- EPIPE (Broken pipe) durante la carga?
- Al seleccionar una imagen, la aplicación se reinicia en S3
- ¿Qué sucede después de que DTR / RTS sea enviado a una placa Arduino basada en FTDI?
- Retrofit 2 no puede cargar un archivo con dos parámetros adicionales de cadena separados
- Android Studio nunca termina de cargar la aplicación en el Nexus 10
- Subir varias imágenes al servidor en una cola
¿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()