Do czego dokładnie służy ten atrybut taskAffinity
? Przejrzałem dokumentację, ale niewiele mogłem zrozumieć.
Czy ktoś może wyjaśnić powinowactwo do zadań w kategoriach laików?
android
android-manifest
taskaffinity
Traxex1909
źródło
źródło
Odpowiedzi:
Do czego służy koligacja zadań Androida?
Aplikacja na Androida zawiera działania, które tworzą stos jak talia kart. Jeśli uruchomisz aplikację na Androida i uruchomisz pięć czynności A, B, C, D, E. Będą tworzyć stos
E było ostatnim działaniem, które zostało rozpoczęte i jest widoczne. Jeśli zamkniesz E, pojawi się D. Jeśli zamkniesz D, pojawi się C. itp.
Zwróć uwagę, że Działania
B
iD
są tym samym działaniem. Co by się stało, gdyby użytkownik wprowadził pewne modyfikacje w działaniuD weather screen
, a następnie zdecydował się zamknąć działanie, a następnie zamknąćC Map view
?Wtedy użytkownik wróciłby do ekranu pogody i byłby niezadowolony, ponieważ zmiany wprowadzone na poziomie
D weather screen
nie zostały zapisane w poziomieB weather screen
. Chociaż jest to ta sama czynność, jest to inny STAN tej czynności.Użytkownik miał 5-warstwowy stos działań, a dwa z nich to ta sama aktywność. Usunięcie wszystkich 5 ze stosu stworzy zjawisko, w którym będziesz wchodzić w interakcje z dwiema różnymi wersjami tej samej czynności i może być dość mylące.
Użytkownicy zwykle nie myślą w kategoriach sztywnego zestawu czynności. Myślą: „och, widok pogody, dokonam tam zmiany”, a potem chcą wrócić do widoku mapy. Następnie wykonaj kopię zapasową ponownie, ponieważ chcą wrócić do ekranu logowania. Dlaczego jest
B weather app
wyświetlany i dlaczego nie zapisał ustawień z poziomuD
?Programista mógłby być w stanie złagodzić pewne zamieszanie, gdyby Działania
B
iD
były połączone w stanie. W ten sposób zmiana jednego zmienia drugą. Za każdym razem, gdy użytkownik otwiera nowy ekran pogody, potajemnie otwiera on pojedyncze wystąpienie ekranu pogody.W takich okolicznościach może być pożądana zmiana zakresu zadania. Użytkownik zmieniłby poziom D. Następnie cofnął się do poziomu B. I zobaczył zmiany w B, które zostały wprowadzone do D.
Program przechowuje stos, przez który można wykonać kopię zapasową, co jest miłe, a gdy użytkownik otwiera X wystąpień tej samej aktywności w losowych miejscach, wszystkie są jednym.
Pokaz slajdów z dodatkowymi wyjaśnieniami: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
źródło
singleInstance
zamiast używaćtaskAffinity
?taskAffinity
:-( Wyjaśnienie jest niejasne. Niesamowite, że te odpowiedzi mają tak wiele pozytywnych głosów.taskAffinity
służy do określenia nazwy zadania, w którym działanie preferuje działanie. Gdy elementIntent
zawiera flagęFLAG_ACTIVITY_NEW_TASK
, działanie jest następnie umieszczane w tym konkretnym zadaniu (zdefiniowanym przeztaskAffinity
).Although it's the same activity, it's a different STATE of that activity.
Powiedziałbym: „To kolejny przykład tej aktywności”.Powinowactwo wskazuje, do którego zadania dane działanie woli należeć.
Powinowactwo pojawia się w dwóch okolicznościach:
Gdy intencja uruchamiająca działanie zawiera flagę FLAG_ACTIVITY_NEW_TASK.
Gdy działanie ma atrybut allowTaskReparenting ustawiony na „true”.
Zobacz http://developer.android.com/guide/components/tasks-and-back-stack.html
źródło
W tej szczegółowej prezentacji można znaleźć wszystkie przypadki (a czasem przypadki skrajne)
Proszę zapoznać się z Manipulowanie zadaniami Androida i stosem wstecznym
źródło