2010-04-13 21 views
27

¿Cuáles son las ventajas/desventajas al colocar un código de acceso de red extenso en un subproceso de una actividad o un subproceso en un servicio? ¿Cómo afectaría la aplicación? Estoy escribiendo un reproductor de audio en tiempo real y, por lo que he leído hasta ahora, poner el código en un servicio seguirá bloqueando la aplicación para que se necesite un nuevo hilo, ¿sabe alguien si tiene más sentido poner este fragmento de código? en un servicio.Subprocesos de aplicación vs Subprocesos de servicio

Respuesta

35

Sí, una operación de bloqueo en un Servicio seguirá bloqueando la aplicación. A pesar de las primeras apariciones, los Servicios no son simplemente para ejecutar tareas en segundo plano. Son para ejecutar tareas con un ciclo de vida que es independiente del ciclo de vida de la actividad (IE, pueden continuar después de que se cierre la actividad).

Un servicio que se inicia cuando una actividad comienza y finaliza cuando la actividad finaliza es inútil.

En su caso, donde está transmitiendo audio, es posible que desee transmitir audio incluso después de que el usuario cierre la Actividad, en cuyo caso, debe usar un Servicio, pero igual necesitará un hilo (o un AsyncTask) para bloquear tareas.

+0

Gracias, eso es lo que pensé. En un tema relacionado, al menos en el emulador, después de que comencé a transmitir el reproductor, continuaría reproduciéndose incluso después de presionar el botón Atrás. Estaba asumiendo que se detendría cuando la actividad ya no estuviera en primer plano ... ¿es por el nuevo hilo o se reproducirá sin importar hasta que Android mate la aplicación? – zerayaqob

+0

Sí, el hilo seguirá funcionando hasta que Android lo mate. Si desea que se detenga, implemente algún tipo de indicador "activo" y configúrelo como falso en su método onDestroy(). – synic

+3

¡También tenga en cuenta que los hilos en una 'Actividad' se destruyen cuando la configuración (lectura: orientación) cambia! Esto no es verdad para los hilos en 'Service' s. – MrSnowflake

1

Según mi experiencia (1+ años desarrollando Android), no hay diferencia entre ejecutar un nuevo hilo en un servicio o en una actividad. Trate de no mantener una referencia a la Actividad en el nuevo hilo: use el contexto de la aplicación.

Además, el ciclo de vida del servicio no ayudó en absoluto, ya que algunos métodos no están garantizados para ser invocados :(

La única diferencia puede ser que el servicio puede ser destruido sin destruir por completo la aplicación - por lo tanto potencialmente destruir los nuevos temas ¿por potencialmente porque en el lado práctico, esto no sucede la aplicación SIEMPRE muere sin matar el servicio antes de eso, es decir:.?. el mecanismo de servicio local es inútil !! !

El servicio remoto es una discusión diferente; me refería solo a "¿dónde debería ejecutar un nuevo hilo?".

¡¡Buena suerte !!!

+0

¿Puede dar una situación en la que necesite ejecutar un nuevo hilo en un servicio en lugar de simplemente ejecutar un nuevo hilo en una actividad para realizar la misma tarea? – committedandroider

+0

@committedandroider Supongamos que tiene una aplicación de navegador y el usuario selecciona descargar un archivo de 1 GB. El usuario no mantendrá abierta la aplicación del navegador y esperará a que se descargue el archivo. Simplemente comenzará la descarga y saldrá de la aplicación.En este caso, si el hilo generado por la Actividad ya no se ejecutará, debe generar un hilo del Servicio. – CopsOnRoad

+0

@Jack sí, tiene sentido. esto fue hace mucho tiempo lol – committedandroider

Cuestiones relacionadas