Spiegazione dell'affinità dell'attività Android


Risposte:


161

A cosa serve Android Task Affinity?

Un'applicazione Android ha attività che formano una pila come un mazzo di carte. Se avvii un'applicazione Android e inizi cinque attività A, B, C, D, E. Formeranno una pila

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

E è stata l'ultima attività ad essere avviata e sta mostrando. Se chiudi E, verrà mostrato D. Se chiudi D, verrà mostrato C. eccetera.

Notare che le attività Be Dsono la stessa attività. E se l'utente apportasse alcune modifiche a D weather screen, quindi decidesse di chiudere l'attività, quindi chiudere C Map view?

Quindi l'utente sarebbe tornato alla schermata meteo e l'utente sarebbe scontento perché le modifiche apportate a livello D weather screennon sono state salvate in livello B weather screen. Sebbene sia la stessa attività, è uno STATO diverso di quell'attività.

L'utente aveva una pila di attività a 5 livelli e due di esse erano la stessa attività. Estrarre tutti e 5 dallo stack creerà il fenomeno in cui interagirai con due diverse versioni della stessa attività e può creare confusione.

Gli utenti di solito non pensano in termini di una serie rigida di attività. Pensano: "ooh la visualizzazione del tempo, farò una modifica lì" e poi vogliono tornare alla visualizzazione della mappa. Quindi esegui nuovamente il backup perché vogliono tornare alla schermata di accesso. Perché la B weather appvisualizzazione e perché non ha salvato le impostazioni dal livello D?

Il programmatore potrebbe essere in grado di alleviare un po 'di confusione se le attività Be Dfossero collegate in stato. In questo modo cambia in uno cambia l'altro. Ogni volta che l'utente apre una nuova schermata meteo, apre segretamente la singola istanza della schermata meteo.

In queste circostanze, potrebbe essere auspicabile modificare il taskAffinity dell'attività. L'utente cambia il livello D. Quindi torna al livello B. E vedere le modifiche in B apportate a D.

Il programma mantiene uno stack attraverso il quale è possibile eseguire il backup, il che è carino, e quando l'utente apre X istanze della stessa attività in posti casuali, sono tutte una.

Presentazione con ulteriori spiegazioni: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack


13
Che ne dici se usi il singleInstanceinvece di usare il taskAffinity?
hguser

5
Nel caso descritto sopra, preferirei utilizzare Intent.FLAG_ACTIVITY_REORDER_TO_FRONT come flag nell'intento chiamando l'attività D, questo porterebbe l'Attività B in cima a tutte le altre e manterrebbe solo un'istanza di essa
EyalBellisha

63
In realtà, questa risposta non tocca taskAffinityaffatto: - (La spiegazione è vaga. Incredibile che le risposte alle tesi ottengano così tanti voti positivi.
David Wasser

6
Risposta così lunga ma ancora non menziona il semplice fatto: taskAffinityviene utilizzato per specificare il nome dell'attività in cui l'attività preferisce eseguire. Quando un Intentcontiene il flag FLAG_ACTIVITY_NEW_TASK, l'attività viene quindi inserita in questa particolare attività (definita da taskAffinity).
Stan Mots

2
Although it's the same activity, it's a different STATE of that activity.Direi: "È un altro esempio di quell'attività".
Maksim Dmitriev

6

L'affinità indica a quale compito un'attività preferisce appartenere.

L'affinità entra in gioco in due circostanze:

Quando l'intento che avvia un'attività contiene il flag FLAG_ACTIVITY_NEW_TASK.

Quando un'attività ha il suo attributo allowTaskReparenting impostato su "true".

Fare riferimento a http://developer.android.com/guide/components/tasks-and-back-stack.html


26
Grazie per aver copiato da developer.android.com
Anirban

Questo non spiega nulla. Cosa significa in pratica?
James Andrews,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.