Para que exatamente é o atributo taskAffinity
usado? Eu examinei a documentação, mas não consegui entender muito.
Alguém pode explicar a afinidade de tarefas em termos leigos?
Para que exatamente é o atributo taskAffinity
usado? Eu examinei a documentação, mas não consegui entender muito.
Alguém pode explicar a afinidade de tarefas em termos leigos?
Respostas:
Para que é usado o Android Task Affinity?
Um aplicativo Android possui atividades que formam uma pilha como um baralho de cartas. Se você iniciar um aplicativo Android e iniciar cinco atividades A, B, C, D, E. Eles formarão uma pilha
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
E foi a última Activity a ser iniciada e está aparecendo. Se você fechar E, D será mostrado. Se você fechar D, C será mostrado. etc.
Observe que Atividades B
e D
são a mesma atividade. E se o usuário fizesse algumas modificações no D weather screen
, e decidisse fechar a atividade e, em seguida, feche oC Map view
?
Então o usuário voltaria para a tela de previsão do tempo e ficaria infeliz porque as alterações feitas no nível D weather screen
não foram salvas no nívelB weather screen
. Embora seja a mesma atividade, é um ESTADO diferente dessa atividade.
O usuário tinha uma pilha de 5 camadas de atividades, e duas delas eram a mesma atividade. Tirar todos os 5 da pilha criará o fenômeno em que você estará interagindo com duas versões diferentes da mesma atividade e pode ser bastante confuso.
Os usuários geralmente não pensam em termos de uma pilha rígida de atividades. Eles pensam: "ooh a visualização do tempo eu vou fazer uma alteração lá" e então querem voltar para a visualização do mapa. Em seguida, faça o backup novamente porque eles querem voltar para a tela de Login. Por que está sendo B weather app
exibido e por que não salvou as configurações do nível D
?
O programador pode ser capaz de aliviar alguma confusão se as Atividades B
e D
estiverem vinculadas no estado. Dessa forma, muda para um muda o outro. Cada vez que o usuário abre uma nova tela de clima, ele abre secretamente uma única instância da tela de clima.
Nessas circunstâncias, pode ser desejável alterar taskAffinity da Activity. O usuário mudaria o nível D. Em seguida, voltaria ao nível B. E veria as alterações em B que foram feitas em D.
O programa mantém uma pilha pela qual você pode fazer backup, o que é bom, e quando o usuário abre X instâncias da mesma atividade em lugares aleatórios, elas são todas uma.
Apresentação de slides com mais explicações: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
singleInstance
vez de usar o taskAffinity
?
taskAffinity
nada :-( A explicação é vaga. É incrível que essas respostas recebam tantos votos positivos.
taskAffinity
é usado para especificar o nome da tarefa em que a atividade prefere ser executada. Quando um Intent
contém o sinalizador FLAG_ACTIVITY_NEW_TASK
, a atividade é então colocada nesta tarefa específica (definida por taskAffinity
).
Although it's the same activity, it's a different STATE of that activity.
Eu diria: "É outro exemplo dessa atividade."
A afinidade indica a qual tarefa uma atividade prefere pertencer.
A afinidade entra em ação em duas circunstâncias:
Quando o intent que inicia uma atividade contém o sinalizador FLAG_ACTIVITY_NEW_TASK.
Quando uma atividade tem seu atributo allowTaskReparenting definido como "true".
Consulte http://developer.android.com/guide/components/tasks-and-back-stack.html
Você pode encontrar todos os casos (e algumas vezes casos extremos) nesta apresentação detalhada
Por favor, consulte Manipulação de tarefas Android e pilha de retorno