В чем именно используется атрибут taskAffinity
? Я прошел через documentation, но я не мог понять.Android Task Affinity Объяснение
Может ли кто-нибудь объяснить близость задачи в условиях laymans?
В чем именно используется атрибут taskAffinity
? Я прошел через documentation, но я не мог понять.Android Task Affinity Объяснение
Может ли кто-нибудь объяснить близость задачи в условиях laymans?
Что такое 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
Как насчет использования 'singleInstance' вместо использования 'taskAffinity'? – hguser
singleInstance имеет недостаток в том, что Activity, являющийся singleInstance, не может иметь никакой другой активности в стеке действий. с taskAffinity вы можете настроить, что одно действие начнется в другой задаче, а другое - в текущем. – Malachiasz
В некоторых случаях SingleInstance - это правильный путь. особенно если вы хотите убедиться, что ваша деятельность является единственной деятельностью в своей задаче и что она является корнем * независимо * от намерения, которое его создало. Таким образом вы можете разоблачить эту активность сторонним разработчикам и приложениям, не потеряв контроль над записью задачи. –
Сродство указывает на то, какая задача деятельность предпочитает принадлежать.
Сродство вступает в игру в двух случаях:
Когда цель, которая запускает деятельность содержит флаг FLAG_ACTIVITY_NEW_TASK.
Когда действие имеет атрибут allowTaskReparenting, установленный как «true».
Пожалуйста, обратитесь http://developer.android.com/guide/components/tasks-and-back-stack.html
Вот очень хорошее объяснение с примерами: https://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack – user1269737