2013-07-26 6 views
74

В чем именно используется атрибут taskAffinity? Я прошел через documentation, но я не мог понять.Android Task Affinity Объяснение

Может ли кто-нибудь объяснить близость задачи в условиях laymans?

+0

Вот очень хорошее объяснение с примерами: https://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack – user1269737

ответ

139

Что такое Android Task Affinity?

Приложение для Android имеет действия, которые образуют стек, подобный колоде карт. Если вы запустите приложение Android и запустите пять действий A, B, C, D, E. Они составят стек

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

E был последним объектом деятельности, который нужно начать и он отображает. Если вы закроете E, появится сообщение D. Если вы закроете D, появится C. и т. д.

Обратите внимание, что Мероприятия B и D - это та же деятельность. Что делать, если пользователь должен внести некоторые изменения в D weather screen, а затем решил закрыть активность, а затем закрыть C Map view?

Тогда пользователь вернется на экран погоды, и пользователь будет недоволен, потому что изменения, сделанные на уровне D weather screen, не были сохранены на уровне B weather screen. Хотя это одно и то же действие, это другое состояние этой деятельности.

Пользователь имел 5-слойный стек действий, а два из них были одного и того же вида деятельности. Попадание всех 5 из стека создаст явление, в котором вы будете взаимодействовать с двумя разными версиями одного и того же вида деятельности и может быть довольно запутанным.

Пользователи обычно не думают о жесткой стеке действий. Они думают: «Ох, погода, я сделаю там изменения», а затем они захотят вернуться к представлению «Карта». Затем снова создайте резервную копию, потому что они хотят вернуться на экран входа в систему. Почему отображается B weather app и почему он не сохранил настройки с уровня D?

Программист может устранить некоторую путаницу, если в состоянии были связаны действия B и D. Таким образом, изменения меняются друг на друга. Каждый раз, когда пользователь открывает новый экран погоды, он тайно открывает единственный экземпляр экрана погоды.

В этих обстоятельствах может потребоваться изменение задачиАвентизация Действия. Пользователь изменит уровень D. Затем вернитесь к уровню B. И посмотрите изменения в B, которые были сделаны в D.

Программа хранит стек, с которым вы можете выполнить резервное копирование, что приятно, и когда пользователь открывает X экземпляров одной и той же активности в случайных местах, все они одни.

слайд-шоу с большим количеством объяснения: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

+7

Как насчет использования 'singleInstance' вместо использования 'taskAffinity'? – hguser

+0

singleInstance имеет недостаток в том, что Activity, являющийся singleInstance, не может иметь никакой другой активности в стеке действий. с taskAffinity вы можете настроить, что одно действие начнется в другой задаче, а другое - в текущем. – Malachiasz

+1

В некоторых случаях SingleInstance - это правильный путь. особенно если вы хотите убедиться, что ваша деятельность является единственной деятельностью в своей задаче и что она является корнем * независимо * от намерения, которое его создало. Таким образом вы можете разоблачить эту активность сторонним разработчикам и приложениям, не потеряв контроль над записью задачи. –

5

Сродство указывает на то, какая задача деятельность предпочитает принадлежать.

Сродство вступает в игру в двух случаях:

Когда цель, которая запускает деятельность содержит флаг FLAG_ACTIVITY_NEW_TASK.

Когда действие имеет атрибут allowTaskReparenting, установленный как «true».

Пожалуйста, обратитесь http://developer.android.com/guide/components/tasks-and-back-stack.html