A cosa serve esattamente l'attributo taskAffinity
? Ho esaminato la documentazione ma non ho capito molto.
Qualcuno può spiegare l'affinità di compito in termini profani?
A cosa serve esattamente l'attributo taskAffinity
? Ho esaminato la documentazione ma non ho capito molto.
Qualcuno può spiegare l'affinità di compito in termini profani?
Risposte:
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à B
e D
sono 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 screen
non 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 app
visualizzazione 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à B
e D
fossero 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
singleInstance
invece di usare il taskAffinity
?
taskAffinity
affatto: - (La spiegazione è vaga. Incredibile che le risposte alle tesi ottengano così tanti voti positivi.
taskAffinity
viene utilizzato per specificare il nome dell'attività in cui l'attività preferisce eseguire. Quando un Intent
contiene il flag FLAG_ACTIVITY_NEW_TASK
, l'attività viene quindi inserita in questa particolare attività (definita da taskAffinity
).
Although it's the same activity, it's a different STATE of that activity.
Direi: "È un altro esempio di quell'attività".
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
Puoi trovare tutti i casi (e alcune volte casi limite) in questa presentazione dettagliata
Per favore, fare riferimento Manipolazione delle attività Android e back stack