2011-02-08 16 views
42

Estoy un poco confundido acerca de la diferencia entre una tarea y un proceso en Android.Diferencia entre tarea y proceso en Android

Si entiendo correctamente, una tarea es solo una pila de actividades. Por lo que he leído hasta ahora yo creo una tarea podría tener este aspecto:

| Activity A running in Process P1 | 
| Activity B running in Process P2 | 
| Activity C running in Process P3 | 

Así que, básicamente, las actividades de diferentes procesos pueden estar contenidos en la misma pila. ¿Estoy en lo correcto?

Otra pregunta: ¿Cuál es el verdadero significado de "contexto de aplicación"? El proceso o la tarea?

Y pregunta final: La clase de aplicación (que es básicamente un conjunto unitario) representa el proceso o la tarea?

Respuesta

39

Todo lo que he aprendido alguna vez de ello, he aprendido en este page.

Editar: También me tropecé con Activity and Task Design Guidelines. Se ve a cubrir el tema exacto que preguntó acerca. He aprendido mucho :)

Así que, básicamente, las actividades de diferentes procesos pueden estar contenidos en el mismo pila. ¿Estoy en lo correcto?

Según lo que yo sé, estás en lo cierto. Mi comprensión es que los Procesos son las unidades de ejecución real, mientras que las Tareas se refieren a la asociación para hacer las cosas. Como ejemplo de la página mencionada anteriormente, si crea una intención que abre una página web, la Actividad que crea se crea en el proceso de los navegadores web, pero está asociada a sus aplicaciones Tarea. Una tarea, por lo tanto, se convierte en una pila virtual de actividades que se ejecutan en diferentes procesos según la aplicación que proporcionó la actividad.


Otra pregunta: ¿Cuál es el verdadero significado de "contexto de aplicación"? El proceso o la tarea?

Esta es una buena pregunta. Basado en leer la página anterior, mi entendimiento es que un contexto de Aplicaciones está asociado con el proceso. Estoy basando que sobre la interpretación de esta línea de esa página, pero puede haber otra información:

Normalmente, una nueva instancia de una actividad se puso en marcha en el proceso de la aplicación que se define, así todas las instancias de la actividad de ejecución en el mismo proceso


Y la pregunta final: la clase de aplicación (que es básicamente una singleto n) representa el proceso o la tarea?

Con la misma interpretación que el anterior, mi conjetura en cuanto a por qué un objeto Application representa un Singleton se debe a que todas sus aplicaciones obtienen actividades se ejecutan en un solo proceso y ese proceso está ligado a la aplicación. No sé si este es un punto de diseño, pero parece ser, como mínimo, una consecuencia del diseño actual.

Editar: Hay algunas advertencias sobre esto. Parece que su aplicación puede extenderse a través de múltiples procesos, así que supongo que el objeto de aplicación y el contexto actúan como un mecanismo para conectar todos los procesos entre sí. Estoy bastante seguro de que su modelo mental ya lo permitió, asumiendo que los procesos eran de diferentes aplicaciones, por lo que es solo una pequeña diferencia permitirlo en un solo proceso.

El elemento manifiesto tiene el atributo androide: proceso con la descripción de la siguiente manera:

El nombre del proceso en el que la actividad debe plazo. Normalmente, todos los componentes de una aplicación se ejecutan en el proceso predeterminado creado para la aplicación. Tiene el mismo nombre que el paquete de la aplicación . El atributo de proceso del elemento puede establecer un valor predeterminado para todos los componentes. Pero cada componente puede anular el valor predeterminado, , lo que le permite extender su aplicación en varios procesos. Si el nombre asignado a este atributo comienza con dos puntos (':'), se crea un nuevo proceso , privado a la aplicación, cuando se necesita y la actividad se ejecuta en ese proceso. Si el nombre proceso comienza con una carácter en minúscula, la actividad se ejecutará en un proceso global de ese nombre, siempre que tiene permiso para hacerlo. Este permite que los componentes en diferentes aplicaciones compartan un proceso, , reduciendo el uso de recursos.

+5

usted es muy informativo gracias. La mayoría de estas cosas no son necesarias para hacer buenas aplicaciones, pero me gusta saber cosas "debajo del capó". Tengo un poco de experiencia en programación en el kernel así que no puedo dormir bien si no sé exactamente lo que está sucediendo: D – Emiliano

+3

Me sorprendería si el objeto Aplicación abarcara varios procesos si implementa su aplicación para abarcar múltiples procesos (usando android: proceso). Creo que la clase Application simplemente tiene un nombre incorrecto, debería haber sido llamada "Proceso" en su lugar. –

+0

@Dibyehdu "la actividad que se crea se crea en el navegador web" es el inglés correcto. Léalo con una coma después de que se crea el primer " – OGHaza

7

Una nota importante de Android Developer:

Un malentendido común acerca de la multitarea de Android es la diferencia entre un proceso y una aplicación. En Android estas no son estrictamente entidades acopladas: las aplicaciones pueden parecer presentes para el usuario sin un proceso real que ejecuta actualmente la aplicación; múltiples aplicaciones pueden compartir procesos, o una aplicación puede hacer uso de múltiples procesos según sus necesidades; el proceso (s) de una aplicación se puede mantener alrededor de Android, incluso cuando esa aplicación no está haciendo activamente algo .

+0

El enlace a http://developer.android.com/resources/articles/multitasking-android-way.html devuelve "Error 404 archivo no encontrado" ... – jsanmarb

+0

@jsanmarb enlace actualizado! – metdos

5

proceso: Cuando un componente de aplicación se inicia y la aplicación no tiene ningún otro componente en ejecución, el sistema Android se inicia un nuevo proceso de Linux para la aplicación con un solo hilo de ejecución. Por defecto, todos los componentes de la misma aplicación se ejecutan en el mismo proceso e hilo (llamado el hilo "principal").Cada aplicación se ejecuta en su propio proceso y todos los componentes de la aplicación se ejecutan en ese proceso, de forma predeterminada.

para el proceso de detalle: http://developer.android.com/guide/components/processes-and-threads.html

Tareas: Una tarea es un conjunto de actividades que los usuarios interactúan con la hora de realizar un determinado trabajo. Las actividades se organizan en una pila (la "pila posterior"), en el orden en que se abre cada actividad. Una actividad incluso puede iniciar actividades que existen en otras aplicaciones en el dispositivo. Por ejemplo, si su aplicación desea enviar un correo electrónico, puede definir una intención para realizar una acción de "envío" e incluir algunos datos, como una dirección de correo electrónico y un mensaje. Una actividad de otra aplicación que se declara a sí misma para manejar este tipo de intención se abre. En este caso, la intención es enviar un correo electrónico para que comience la actividad de "redacción" de una aplicación de correo electrónico (si varias actividades admiten el mismo intento, el sistema le permite al usuario seleccionar cuál usar). Cuando se envía el correo electrónico, su actividad se reanuda y parece como si la actividad del correo electrónico fuera parte de su aplicación. Aunque las actividades pueden ser de diferentes aplicaciones, Android mantiene esta experiencia de usuario sin problemas manteniendo ambas actividades en la misma tarea.

para el detalle task- http://developer.android.com/guide/components/tasks-and-back-stack.html

Cuestiones relacionadas