Explicación de la afinidad de tareas de Android

Respuestas:

160

¿Para qué se utiliza la afinidad de tareas de Android?

Una aplicación de Android tiene actividades que forman una pila como una baraja de cartas. Si inicia una aplicación de Android y comienza cinco actividades A, B, C, D, E. Formarán una pila

E   - chat view
D   - weather screen
C   - map view
B   - weather screen
A   - login screen

E fue la última actividad que se inició y se muestra. Si cierra E, se mostrará D. Si cierra D, se mostrará C. etc.

Observe que Actividades By Dson la misma actividad. ¿Qué pasaría si el usuario hiciera algunas modificaciones en el D weather screen, y luego decidiera cerrar la actividad, luego cerrar elC Map view ?

Entonces, el usuario volvería a la pantalla del clima y no estaría contento porque los cambios realizados en el nivel D weather screenno se guardaron en el nivel B weather screen. Aunque es la misma actividad, es un ESTADO diferente de esa actividad.

El usuario tenía una pila de actividades de 5 capas y dos de ellas eran la misma actividad. Sacar los 5 de la pila creará el fenómeno en el que interactuará con dos versiones diferentes de la misma actividad y puede ser bastante confuso.

Los usuarios no suelen pensar en términos de una pila rígida de actividades. Piensan: "Oh, la vista del clima, haré un cambio allí" y luego quieren volver a la vista del Mapa. Luego, retroceda de nuevo porque desea volver a la pantalla de inicio de sesión. ¿Por qué se B weather appmuestra y por qué no guardó la configuración del nivel D?

El programador podría aliviar cierta confusión si Actividades By Destuvieran vinculados en estado. De esa manera cambia a uno cambia al otro. Cada vez que el usuario abre una nueva pantalla meteorológica, secretamente abre la única instancia de la pantalla meteorológica.

En estas circunstancias, puede ser deseable cambiar el taskAffinity de la actividad. El usuario cambiaría el nivel D. Luego volvería al nivel B. Y vería los cambios en B que se hicieron a D.

El programa mantiene una pila a través de la cual puede hacer copias de seguridad, lo cual es bueno, y cuando el usuario abre X instancias de la misma actividad en lugares aleatorios, todas son una.

Presentación de diapositivas con más explicación: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

Eric Leschinski
fuente
13
¿Qué tal si usa el en singleInstancelugar de usar el taskAffinity?
hguser
5
En el caso descrito anteriormente, preferiría usar Intent.FLAG_ACTIVITY_REORDER_TO_FRONT como una marca en la Intent llamando a la Actividad D, esto llevaría la Actividad B encima de todas las demás y mantendría solo una instancia de ella
EyalBellisha
63
En realidad, esta respuesta apenas toca taskAffinityen absoluto :-( La explicación es vaga. Increíble que estas respuestas obtengan tantos votos a favor.
David Wasser
5
Respuesta tan larga, pero aún no menciona el simple hecho: taskAffinityse usa para especificar el nombre de la tarea en la que la actividad prefiere ejecutarse. Cuando un Intentcontiene la bandera FLAG_ACTIVITY_NEW_TASK, la actividad se coloca en esta tarea en particular (definida por taskAffinity).
Stan Mots
2
Although it's the same activity, it's a different STATE of that activity.Yo diría: "Es otro ejemplo de esa actividad".
Maksim Dmitriev
6

La afinidad indica a qué tarea prefiere pertenecer una actividad.

La afinidad entra en juego en dos circunstancias:

Cuando la intención que lanza una actividad contiene la bandera FLAG_ACTIVITY_NEW_TASK.

Cuando una actividad tiene su atributo allowTaskReparenting establecido en "true".

Consulte http://developer.android.com/guide/components/tasks-and-back-stack.html

hitesh141
fuente
26
Gracias por copiar de developer.android.com
Anirban
Esto no explica nada. ¿Qué significa en la práctica?
James Andrews