2012-05-13 18 views
5

Estaba leyendo un artículo en el blog de desarrollador de Android Process and Threads que habla sobre la creación de un nuevo proceso para un componente específico de la Aplicación. Pero no entendí cuándo crear un nuevo proceso en mi aplicación se convierte en una necesidad absoluta. ¿Podría ayudarme a comprender las siguientes dudas que tengo al respecto?¿Cuándo será necesario crear un proceso separado en una aplicación?

  1. ¿Cuándo como desarrollador debería sentir que necesito tener un proceso separado para un componente de Android?
  2. ¿La introducción de un nuevo proceso tiene algún efecto secundario en el rendimiento general de la aplicación?

Cualquier otra información es muy apreciada.

Gracias, SKU

+0

Parece que este hilo de StackOverflow está mejor documentado: [Sigue este enlace:)] (https://stackoverflow.com/questions/4658511/android-how-to-decide-whether-to-run-a-service- in-a-separate-process) – Tobliug

Respuesta

0

1.) Que tiene que hacer algo en proceso separado o hilo cuando no quiere que su aplicación se comporte lentamente. Al introducir subprocesos, fuerza a su aplicación a no ejecutar en el subproceso de interfaz de usuario. Por lo tanto, hacer que tu aplicación responda a otros eventos. Por ejemplo: puede usar subprocesos cuando tiene que buscar algunos datos del servicio web para que ocurra en segundo plano y no afecte su aplicación.

2.) Los subprocesos no deben utilizarse ... Deberíamos usar AsyncTask o cargadores en lugar de Android.

+2

Entiendo y he disfrutado de los beneficios de usar un hilo separado (en forma de Handler, AsyncTask y Worker Thread) en mis aplicaciones. Pero no significa que crear un nuevo hilo en cualquiera de las formas mencionadas creará un nuevo proceso. ¿Siente que usar un proceso separado es agrupar los hilos que tienen un uso común de los recursos? – sku

+0

No, permitir que los componentes en diferentes aplicaciones compartan un mismo proceso ayuda a reducir el uso de recursos. Crear un nuevo proceso aumentará la utilización de los recursos, pero a veces puede ser necesario. Por ejemplo, es posible que desee que su sericio se ejecute, incluso si la aplicación se ejecuta en diferentes procesos se bloquea. – Rookie

+0

No diría que los hilos NO DEBEN ser utilizados. AsyncTask hace que los TIPOS de tareas específicos sean mucho más fáciles de lograr programáticamente, p. alguna tarea que tiene un período de ejecución finito que no debe realizarse en el hilo principal, como descargar un archivo. – Kerry

0

1.) En android 4.0 (y posiblemente 3.0, no estoy seguro) El dispositivo no le permite usar el agente HTTP en el hilo principal, ya que esto ralentiza la interfaz de usuario. Esto es cuando los hilos son útiles.

También con el uso de funciones que necesitan una gran cantidad de CPU, si se ejecutan en el subproceso de la interfaz de usuario, la interfaz de usuario se retrasará y no responderá hasta que la función finalice.

2.) como se indica a 1, en realidad va a mejorar el rendimiento visual de su aplicación;)

+1

Hola Wampie, entiendo por qué necesito tener un hilo separado para las operaciones que consumen tiempo. Pero no entiendo por qué uno necesita un proceso separado para cualquier componente de Android. Se crearán nuevos hilos en su aplicación en el proceso de aplicación existente hasta que se especifique lo contrario. Todavía estoy buscando una respuesta sobre "por qué uno requiere tener un proceso por separado" – sku

+2

Process! = Thread – Ethan

1

Tener un proceso separado puede ser útil si hay componentes de su aplicación, que no necesariamente tienen que estar corriendo ser útil para el usuario, y la tarea de fondo es crítica para la "corrección" de la aplicación (ya sea ahora o en el futuro). El ejemplo clásico de esto es una aplicación que tiene un servicio donde el servicio guarda o carga algunos datos que son críticos para su aplicación (¡lo que significa que la única forma de recuperar la información es hacer que el usuario la vuelva a ingresar!). El servicio podría ser responsable de hacer algo como subir o guardar datos, mientras que la actividad es solo la interfaz para el usuario. Así que los desarrolladores deben desacoplar estos dos componentes para evitar problemas que puedan surgir de mi próximo punto ...

Android fue diseñado para funcionar en un entorno restringido de recursos (especialmente memoria), por lo que los procesos considerados sin importancia son asesinados periódicamente para abrir la memoria importantes por el "asesino de memoria baja" (LMK) (si Google esto obtendrá toneladas de información sobre el tema). Cosas como los procesos en primer plano tienen una prioridad más alta dado que actualmente están en uso, pero a veces también mueren por motivos como consumir demasiada memoria. Ahora imagine que necesita guardar algunos datos en una base de datos después de que el usuario haga algo en la aplicación y use un servicio para asegurarse de que se realice incluso si el usuario navega fuera de la aplicación. A menos que cree el servicio en su propio proceso, es probable que el proceso que contiene tanto la actividad como el servicio sea eliminado ya que el proceso pertenece a una actividad que no está en primer plano. Sin embargo, no siempre es necesario colocar el servicio en su propio proceso, muchas veces simplemente dando al servicio su propio hilo será suficiente; es muy específico de la aplicación.Solo colocaría un servicio en su propio proceso si tardó más de unos pocos segundos (el tiempo suficiente para que el usuario se aleje de mi aplicación y para que el LMK intervenga) para realizar alguna tarea en segundo plano y esa tarea relacionada a la "corrección" de mi aplicación (IE guardando datos para más adelante). Para algo como el almacenamiento en caché, adhiérase a los hilos, ya que si el proceso se elimina prematuramente, puede recrear esos datos más adelante.

Otra razón para tener un proceso separado es si está ejecutando un servicio global (un servicio que puede ser utilizado por aplicaciones distintas del suyo) que tal vez proporcione una interfaz a través de una Actividad para la configuración.

En cuanto a la pregunta de rendimiento, definitivamente habrá un golpe de rendimiento para algo como esto. La comunicación entre procesos no es barata, por lo que solo debería utilizar un proceso por separado si encaja en un caso de uso específico, como los mencionados anteriormente. Además, hay una cierta cantidad de memoria por encima para mantener un proceso, por lo que es otro golpe de rendimiento.

Cuestiones relacionadas