Для чего именно используется атрибут taskAffinity
? Я просмотрел документацию, но многого не понял.
Может ли кто-нибудь объяснить сходство задач с точки зрения непрофессионала?
Для чего именно используется атрибут taskAffinity
? Я просмотрел документацию, но многого не понял.
Может ли кто-нибудь объяснить сходство задач с точки зрения непрофессионала?
Ответы:
Для чего используется привязка задач Android?
В приложении для Android есть действия, которые образуют стопку, как колода карт. Если вы запускаете приложение для Android и запускаете пять действий A, B, C, D, E. Они сформируют стопку
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
E было последним запущенным Activity, и он отображается. Если вы закроете E, отобразится D. Если вы закроете D, отобразится C. и т.п.
Обратите внимание, что Действия B
и D
- это одно и то же действие. Что, если бы пользователь внес некоторые изменения в D weather screen
, а затем решил закрыть действие, а затем закрытьC Map view
?
Тогда пользователь вернется к экрану погоды, и он будет недоволен, потому что изменения, сделанные на уровне, D weather screen
не были сохранены на уровне B weather screen
. Хотя это одно и то же действие, это другое СОСТОЯНИЕ этого действия.
У пользователя был пятиуровневый стек действий, и два из них были одинаковыми. Извлечение всех 5 из стека создаст явление, при котором вы будете взаимодействовать с двумя разными версиями одного и того же действия, и это может сбить с толку.
Пользователи обычно не думают о жестком стеке действий. Они думают: «Ой, погодный режим, я там поменяю», а затем хотят вернуться к просмотру карты. Затем сделайте резервную копию еще раз, потому что они хотят вернуться к экрану входа в систему. ПочемуB weather app
отображается и почему не сохранились настройки с уровня D
?
Программист может облегчить некоторую путаницу, если Действия B
иD
были связаны в состоянии. Таким образом, одно изменение меняет другое. Каждый раз, когда пользователь открывает новый экран погоды, он тайно открывает единственный экземпляр экрана погоды.
В этих обстоятельствах может оказаться желательным изменение taskAffinity Activity. Пользователь изменит уровень D. Затем вернется на уровень B. И увидит изменения в B, которые были внесены в D.
Программа хранит стек, через который вы можете делать резервные копии, что приятно, и когда пользователь открывает X экземпляров одного и того же действия в случайных местах, все они становятся одним целым.
Слайд-шоу с дополнительными пояснениями: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
singleInstance
вместо taskAffinity
?
taskAffinity
вообще почти не затрагивает :-( Объяснение расплывчатое. Удивительно, что за эти ответы так много положительных голосов.
taskAffinity
используется для указания имени задачи, в которой действие предпочитает запускаться. Когда объект Intent
содержит флаг FLAG_ACTIVITY_NEW_TASK
, действие затем помещается в эту конкретную задачу (определенную taskAffinity
).
Although it's the same activity, it's a different STATE of that activity.
Я бы сказал: «Это еще один пример той деятельности».
Родство указывает, к какой задаче предпочитает принадлежать деятельность.
Сходство проявляется в двух обстоятельствах:
Когда намерение, запускающее действие, содержит флаг FLAG_ACTIVITY_NEW_TASK.
Когда для действия атрибут allowTaskReparenting установлен в значение «true».
См. Http://developer.android.com/guide/components/tasks-and-back-stack.html.
Вы можете найти все случаи (а иногда и крайние случаи) в этой подробной презентации.