2013-07-26 13 views

risposta

139

A cosa serve Android Task Affinity?

Un'applicazione Android ha Attività che formano una pila come un mazzo di carte. Se si avvia un'applicazione Android e si iniziano 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à da avviare e viene visualizzata. Se chiudi E, verrà mostrato D. Se chiudi D, verrà mostrato C. ecc.

Si noti che le attività B e D sono la stessa attività. Cosa succede se l'utente ha apportato alcune modifiche allo D weather screen e ha quindi deciso di chiudere l'attività, quindi chiudere lo C Map view?

Quindi l'utente tornerà alla schermata del meteo e l'utente non sarebbe soddisfatto perché le modifiche apportate al livello D weather screen non sono state salvate nel livello B weather screen. Sebbene sia la stessa attività, è un STATO diverso da quell'attività.

L'utente ha una pila di attività a 5 livelli e due di esse hanno la stessa attività. Espellere tutti e 5 i file in pila creerà il fenomeno in cui interagirai con due diverse versioni della stessa attività e potrebbe essere abbastanza confuso.

Gli utenti di solito non pensano in termini di una pila rigida di attività. Pensano: "ooh la vista del tempo farò un cambiamento lì" e poi vogliono tornare alla vista Mappa. Quindi eseguire nuovamente il backup perché vogliono tornare alla schermata di accesso. Perché la visualizzazione di B weather app 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 sono state 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, la modifica dell'attivitàAffinità dell'attività potrebbe essere desiderabile. L'utente dovrebbe cambiare il livello D. Quindi eseguire il backup al livello B. E vedere le modifiche in B apportate a D.

Il programma conserva uno stack da cui è possibile eseguire il backup, il che è piacevole e quando l'utente si apre X casi della stessa attività in luoghi casuali, sono tutti uno.

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

+7

Che ne dite se utilizzare il 'singleInstance' invece di usare 'taskAffinity'? – hguser

+0

singleInstance ha lo svantaggio che un'attività come singleInstance non può avere altre attività nello stack di attività. con taskAffinity è possibile configurare l'avvio di un'attività in un'attività diversa e un'altra in corso. – Malachiasz

+1

In alcuni casi, SingleInstance è la giusta via da percorrere. specialmente se vuoi assicurarti che la tua attività sia l'unica attività del suo compito e che sia la radice * indipendentemente * dall'intento che l'ha creata. In questo modo è possibile esporre tale attività a sviluppatori e app di terze parti senza perdere il controllo del record dell'attività dell'attività. –