2010-08-19 8 views
7

Estoy confundido entre el hilo y el servicio en Android. Si tengo que descargar algún archivo del servidor. Puede ser archivos múltiples a la vez. ¿Qué debo elegir en esta situación, hilo o servicios?Subproceso o servicios

Respuesta

13

Hacer cosas en un Service no hace que se ejecute en segundo plano. También debe crear un subproceso en su servicio para esperar a que se complete la descarga.

Si está utilizando un hilo que es local para una actividad, tendrá problemas para abandonar la actividad, enviarla a segundo plano o una interrupción debido a una llamada entrante, etc. Esto puede hacer que su aplicación muera a causa de la Sistema operativo para liberar memoria. En este caso, el hilo se pierde y es posible que no se reinicie y haga que la aplicación se cuelgue.

Si crea un servicio, no es probable que lo maten, solo un hilo y puede especificar el sistema operativo para reiniciar el servicio después de que el sistema operativo lo mate. Esto hace que el servicio sea una opción más segura para descargas muy largas. Utilizo un servicio en una de mis aplicaciones para descargar un archivo de 20 mb y en este servicio creo un hilo que realiza la descarga.

Un servicio solo lo ayuda a encapsular la descarga y a desacoplarla de la actividad y le proporciona otro estado en el sistema operativo que evitará que el hilo simplemente desaparezca debido a la poca memoria.

+0

gracias por su respuesta! Así que debería ayudar a un servicio que almacena un hilo, ¿no? –

+0

Además, hay cinco niveles en la jerarquía de importancia del proceso de Android. Y, como dijo @Janusz, "usar hilo o servicio" puede afectar la importancia de su proceso."Como un proceso que ejecuta un servicio tiene una clasificación más alta que un proceso con actividades en segundo plano, una actividad que inicia una operación de larga duración podría iniciar un servicio para esa operación, en lugar de simplemente crear un hilo de trabajo, particularmente si la operación es probable que dure más tiempo que la actividad ". –

+0

"Por ejemplo, una actividad que está cargando una imagen a un sitio web debe iniciar un servicio para realizar la carga, de modo que la carga pueda continuar en segundo plano, incluso si el usuario deja la actividad". de http://developer.android.com/guide/components/processes-and-threads.html –

0

El subproceso está bien para realizar una tarea en segundo plano para una aplicación. Desearía usar un servicio si lo necesitara para múltiples aplicaciones.

0

Si desea proporcionar una interfaz para otras aplicaciones para comunicarse con su actividad de descarga: servicio. Si la descarga solo se ejecuta en segundo plano para permitir al usuario interactuar con la interfaz de usuario.

18

¿Qué debo elegir en este hilo de situación o servicios?

No es un "o". Es un "y". Utiliza un hilo de fondo y un servicio.

Un servicio está "en segundo plano" desde el punto de vista de la interfaz de usuario, ya que no tiene interfaz de usuario. Un servicio no está automáticamente "en segundo plano" desde el punto de vista de subprocesamiento, en que onCreate(), onDestroy(), onStart() y onBind() se invocan en el subproceso principal de la aplicación, el mismo subproceso compartido por todas las actividades de esta aplicación. Cualquier cosa de larga ejecución, como una descarga, debe realizarse fuera del subproceso principal de la aplicación, como usar un AsyncTask.

Si sus descargas deben continuar incluso si se destruye la actividad que las desencadenó, debe usar un servicio, con el servicio utilizando un AsyncTask o un hilo de fondo para completar la descarga. Aún mejor es usar un IntentService, que combina un servicio regular con un hilo de fondo.

+0

que está muy bien explicado. Muy fácil de entender – webgenius

+0

gracias por su respuesta! Así que debería ayudar a un servicio que almacena un hilo, ¿no? –

0

su pregunta ya está en documentation. Verifica la columna de la derecha.

Cuestiones relacionadas