Wyjaśnienie powinowactwa zadań Androida


104

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?


1
Oto bardzo dobre wyjaśnienie z przykładami: slideshare.net/RanNachmany/ ...
user1269737,

Myślę, że ta odpowiedź jest najlepsza: stackoverflow.com/a/21383301/1318946
Pratik Butani

Odpowiedzi:


161

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 Bi Dsą 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 screennie 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 appwyświetlany i dlaczego nie zapisał ustawień z poziomu D?

Programista mógłby być w stanie złagodzić pewne zamieszanie, gdyby Działania Bi Dbył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


13
A co powiesz na to, że singleInstancezamiast używać taskAffinity?
hguser

5
W przypadku opisanym powyżej wolałbym użyć Intent.FLAG_ACTIVITY_REORDER_TO_FRONT jako flagi w intencji wywołującej Działanie D, co spowodowałoby, że działanie B
znalazło się

65
Właściwie ta odpowiedź prawie wcale nie dotyka taskAffinity:-( Wyjaśnienie jest niejasne. Niesamowite, że te odpowiedzi mają tak wiele pozytywnych głosów.
David Wasser

6
Tak długa odpowiedź, ale nadal nie wspomina o prostym fakcie: taskAffinitysłuży do określenia nazwy zadania, w którym działanie preferuje działanie. Gdy element Intentzawiera flagę FLAG_ACTIVITY_NEW_TASK, działanie jest następnie umieszczane w tym konkretnym zadaniu (zdefiniowanym przez taskAffinity).
Stan Mots,

3
Although it's the same activity, it's a different STATE of that activity.Powiedziałbym: „To kolejny przykład tej aktywności”.
Maksim Dmitriev

6

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


26
Dziękujemy za skopiowanie z developer.android.com
Anirban

To nic nie wyjaśnia. Co to oznacza w praktyce?
James Andrews

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.