Для чого саме використовується атрибут taskAffinity
? Я переглянув документацію, але не міг багато чого зрозуміти.
Чи може хтось пояснити спорідненість задачі в лайманських термінах?
Для чого саме використовується атрибут taskAffinity
? Я переглянув документацію, але не міг багато чого зрозуміти.
Чи може хтось пояснити спорідненість задачі в лайманських термінах?
Відповіді:
Для чого використовується 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
були пов'язані в штаті. Таким чином змінюється одна змінює іншу. Щоразу, коли користувач відкриває новий екран погоди, він таємно відкриває окремий екземпляр погоди.
У цих умовах може бути бажаним змінити завданняAffinity of Activity. Користувач змінив би рівень D. Потім поверніться до рівня В. І подивіться зміни 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.
Якщо для активності атрибут enableTaskReparenting встановлено на "true".
Зверніться до http://developer.android.com/guide/components/tasks-and-back-stack.html
У цій детальній презентації ви можете знайти всі випадки (а іноді й крайові випадки)
Будь ласка, зверніться до Маніпуляції із завданнями Android та зворотним стеком