Ze strony Application Fundamentals w przewodniku dla programistów Androida:
Domyślnie wszystkie działania w aplikacji są ze sobą powiązane - to znaczy, że preferowane jest, aby wszystkie należały do tego samego zadania.
Działanie „singleInstance” występuje samodzielnie jako jedyne działanie w ramach swojego zadania. Jeśli rozpocznie inną czynność, zostanie ona uruchomiona w innym zadaniu niezależnie od trybu uruchomienia - tak jakby FLAG_ACTIVITY_NEW_TASK było w zamiarze. Pod wszystkimi innymi względami tryb „singleInstance” jest identyczny z trybem „singleTask”.
Jak wspomniano powyżej, nigdy nie istnieje więcej niż jedno wystąpienie działania „singleTask” lub „singleInstance”, więc oczekuje się, że to wystąpienie będzie obsługiwać wszystkie nowe intencje. Aktywność „singleInstance” zawsze znajduje się na szczycie stosu (ponieważ jest to jedyna czynność w zadaniu), więc zawsze jest w stanie obsłużyć intencję. Jednak działanie „singleTask” może mieć inne działania na stosie lub nie. Jeśli tak, to nie jest w stanie poradzić sobie z intencją i zamiar zostaje odrzucony. (Nawet jeśli zamiar został odrzucony, jego nadejście spowodowałoby, że zadanie wyszłoby na pierwszy plan, gdzie pozostałoby).
Ponieważ nigdy nie ma więcej niż jednej instancji działania w jednym z trybów uruchamiania, przycisk Wstecz zawsze przeniesie Cię do istniejącej instancji działania w Twoim przypadku.
Ważną różnicą jest to, że „singleTask” nie wymaga tworzenia nowego zadania dla nowych działań uruchamianych, gdy coś zostanie wybrane. Nie będzie też musiał za każdym razem usuwać tego nowego zadania z przycisku Wstecz.
Ponieważ twój stos działań odnosi się do „zadania” jednego użytkownika i nie wygląda na to, że masz skomplikowaną strukturę intencji, w której singleInstance może być korzystne, aby zawsze je obsługiwać, sugerowałbym użycie trybu uruchamiania pojedynczego zadania.
Tutaj jest dobry post na blogu, aby uzyskać więcej informacji, a także napisać autorstwo obrazu: Seria działań i zadań systemu Android - wprowadzenie do modelu komponentów interfejsu użytkownika systemu Android
FLAG_ACTIVITY_CLEAR_TOP
.W prosty sposób-
singleTask:
System tworzy nowe zadanie i tworzy instancję działania w katalogu głównym nowego zadania. Jeśli jednak instancja działania już istnieje w oddzielnym zadaniu, system kieruje intencję do istniejącej instancji poprzez wywołanie jej
onNewIntent()
metody, zamiast tworzyć nową instancję.one instance
W danym momencie może istnieć tylko aktywność.pojedyncza instancja-
To samo co
"singleTask"
, z tą różnicą, że system nie uruchamia żadnych innych działań w zadaniu obsługującym instancję . Działalność jest zawsze jedynym i jedynym członkiem jej zadania; wszelkie działania rozpoczęte przez to otwierają się w osobnym zadaniu .źródło
singleTask
asingleInstance
działania mogą tylko rozpocząć zadanie. Znajdują się one zawsze w katalogu głównym stosu aktywności. Ponadto urządzenie może pomieścić tylko jedno wystąpienie czynności w danym momencie - tylko jedno takie zadanie.więcej android: launchMode .
źródło
singleTask
- system tworzy nowe zadanie i tworzy instancję działania w katalogu głównym nowego zadania. Jeśli jednak instancja działania już istnieje w oddzielnym zadaniu, system kieruje intencję do istniejącej instancji poprzez wywołanie jejonNewIntent()
metody, zamiast tworzyć nową instancję. Jednocześnie może istnieć tylko jedno wystąpienie działania. więcej developer.android.com