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?
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?
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 - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
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
i D
są tym samym działaniem. Co by się stało, gdyby użytkownik wprowadził pewne modyfikacje w działaniu D 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 poziomie B 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 poziomu D
?
Programista mógłby być w stanie złagodzić pewne zamieszanie, gdyby Działania B
i D
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
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 element Intent
zawiera flagę FLAG_ACTIVITY_NEW_TASK
, działanie jest następnie umieszczane w tym konkretnym zadaniu (zdefiniowanym przez taskAffinity
).
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
W tej szczegółowej prezentacji można znaleźć wszystkie przypadki (a czasem przypadki skrajne)
Proszę zapoznać się z Manipulowanie zadaniami Androida i stosem wstecznym