Diferencia entre tarea y proceso en Android

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

Si entiendo correctamente una tarea es sólo una pila de actividades. De lo que he leído hasta ahora creo que una tarea podría verse así:

| 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 contenidas en la misma pila. ¿Estoy en lo correcto?

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

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

Todo lo que he aprendido sobre él, lo he aprendido en esta página.

Edit : También me tropecé con las directrices de diseño de tareas y actividades. Mira para cubrir el tema exacto que usted pidió alrededor. Aprendí mucho 🙂

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

Basado en mi entendimiento, usted es correcto. Mi comprensión es que los procesos son las unidades de la ejecución real, mientras que las tareas son acerca de 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 navegación web, pero está asociada a la tarea de las aplicaciones. Por lo tanto, una tarea se convierte en una pila virtual de Actividades que se ejecutan en distintos procesos dependiendo de la aplicación que proporcionó la Actividad.


Otra pregunta: ¿Cuál es el verdadero significado del "contexto de la 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 en la interpretación de esta línea de esa página, pero puede haber otra información:

Normalmente, se inicia una nueva instancia de una actividad en el proceso de la aplicación que lo define, por lo que todas las instancias de la actividad se ejecutan en el mismo proceso


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

Con la misma interpretación que la anterior, mi idea de por qué un objeto Application representa un singleton es porque todas las actividades de las aplicaciones se ejecutan en un solo proceso y ese proceso está vinculado a la aplicación. No sé que se trata de un punto de diseño, pero parece ser, como mínimo, una consecuencia del diseño actual.

Edit : Hay algunas advertencias a esto. Parece que su aplicación se puede distribuir a través de múltiples procesos así que, mi conjetura es que el objeto de la aplicación y el contexto actúan como mecanismo para atar todos los procesos juntos. Estoy bastante seguro de su modelo mental ya permitió esto, suponiendo que los procesos eran de diferentes aplicaciones, por lo que es sólo una pequeña diferencia para permitir que dentro de un solo proceso.

El elemento manifest tiene el atributo android: proceso con la descripción como sigue:

El nombre del proceso en el que debe ejecutarse la actividad. 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 aplicación. El atributo de proceso del elemento puede establecer un valor predeterminado diferente para todos los componentes. Pero cada componente puede reemplazar el valor predeterminado, lo que le permite extender su aplicación a través de múltiples procesos. Si el nombre asignado a este atributo comienza con dos puntos (':'), se crea un nuevo proceso, privado para la aplicación, cuando es necesario y la actividad se ejecuta en ese proceso. Si el nombre del proceso comienza con un carácter en minúscula, la actividad se ejecutará en un proceso global de ese nombre, siempre que tenga permiso para hacerlo. Esto permite a los componentes de diferentes aplicaciones compartir un proceso, reduciendo el uso de recursos.

Una nota importante de Android Developer :

Un malentendido común sobre la multitarea de Android es la diferencia entre un proceso y una aplicación. En Android, estas no son entidades estrechamente acopladas: las aplicaciones pueden parecer presentes para el usuario sin un proceso real que esté ejecutando la aplicación; Múltiples aplicaciones pueden compartir procesos, o una aplicación puede hacer uso de múltiples procesos dependiendo de sus necesidades; Los procesos de una aplicación pueden ser mantenidos por Android incluso cuando esa aplicación no está haciendo algo activamente.

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 inicia un nuevo proceso de Linux para la aplicación con un solo hilo de ejecución . De forma predeterminada, todos los componentes de la misma aplicación se ejecutan en el mismo proceso e hilo (llamado "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 una colección de actividades con las que interactúan los usuarios al realizar un determinado trabajo. Las actividades se organizan en una pila (la "pila trasera"), en el orden en que se abre cada actividad. Una actividad puede incluso 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 de realizar una acción de "envío" e incluir algunos datos, como una dirección de correo electrónico y un mensaje. A continuación, se abre una actividad de otra aplicación que se declara para manejar este tipo de intenciones. En este caso, la intención es enviar un mensaje de correo electrónico, de manera que la actividad de "componer" de una aplicación de correo electrónico se inicie (si varias actividades soportan la misma intención, el sistema permite que el usuario seleccione cuál utilizar). Cuando se envía el correo electrónico, su actividad se reanuda y parece que la actividad de correo electrónico era parte de su aplicación. Aunque las actividades pueden ser de diferentes aplicaciones, Android mantiene esta perfecta experiencia de usuario manteniendo ambas actividades en la misma tarea.

Para la tarea de detalle- http://developer.android.com/guide/components/tasks-and-back-stack.html

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.