2010-07-10 8 views
81

Mam aplikację, której główną czynnością jest lista, a następnie możesz kliknąć elementy, które otwierają szczegółowy widok tego elementu. Mam również działalność wyszukiwania, która jest podobna do głównej aktywności i działa zgodnie z przeznaczeniem.Tryb uruchamiania Android singleTask lub singleInstance?

Jednak chcę, aby ta aktywność przeszukiwania miała tylko jedną instancję na stosie, aby użytkownicy mogli przeszukiwać wiele razy, a kliknięcie z powrotem przywróciłoby im poprzedni widok, w którym znajdowali się przed rozpoczęciem wyszukiwania (zamiast wracać do wcześniejsze wyniki wyszukiwania)

Wydaje się, że zarówno tryb uruchamiania singleTask, jak i singelInstance robią, co chcę, więc nie jestem pewien, który powinienem używać w tym celu i dlaczego?

Odpowiedz

139

Z Application Fundamentals stronie Android przewodniku dev:

Domyślnie wszystkie działania aplikacji mają powinowactwo do każdego drugiej - że jest, istnieje preferencja dla nich wszystkich przynależności do tego samego zadania .

Aktywność "pojedyncza inwestycja" ma wartość jako jedyną czynność związaną z zadaniem . Jeśli rozpocznie się kolejna aktywność, ta aktywność zostanie uruchomiona w innym, niezależnym od zadaniu, tak jakby FLAG_ACTIVITY_NEW_TASK był w intencji . Pod wszystkimi innymi względami tryb "pojedynczej instancji" jest identyczny z "pojedynczą jednostką" .

Jak wspomniano powyżej, nie ma nigdy więcej niż jedna instancja o „singleTask” lub „singleInstance” działalności, tak, że oczekuje się instancji do obsługi wszystkich nowych zamiary. Aktywność "singleInstance" jest zawsze na szczycie stosu (ponieważ jest to jedyna czynność w zadaniu ), więc zawsze jest w pozycji do obsługi intencji. Jednak działanie "singleTask" w postaci może mieć lub może nie mieć innych działań nad nim w stosie . Jeśli tak, to nie jest w pozycji , aby obsłużyć zamiar, a intencja została odrzucona. (Chociaż intencją jest odrzucany, jego przybycie będzie spowodowały zadanie przyjść do planie, gdzie pozostanie.)

4 Activities in a Task

Ponieważ nigdy nie jest więcej niż jedna instancja Aktywność z dowolnym trybem uruchamiania, przycisk Wstecz zawsze przeniesie Cię do istniejącej instancji Aktywności w twoim przypadku.

Ważną różnicą jest to, że "singleTask" nie wymaga utworzenia nowego zadania dla nowych działań uruchamianych po wybraniu czegoś. Nie będzie też musiał za każdym razem usuwać tego nowego zadania z tyłu przycisku.

Ponieważ Twój stos aktywności dotyczy wszystkich "zadań" jednego użytkownika, i nie brzmi to tak, jakbyś miał skomplikowaną strukturę Intent, w której pojedynczeInstancja może być korzystna, aby zawsze z nimi poradzić, sugerowałbym użycie trybu uruchamiania singleTask.

Tutaj jest dobrym blogu, aby uzyskać więcej informacji, a także uznawany za obrazka: Android Activities and Tasks series – An introduction to Android’s UI component model

+3

Dzięki! Wygląda to na dobry odczyt ... Rzecz w tym, że faktycznie CHCĘ mieć wiele instancji działania i tylko wtedy, gdy działanie na pierwszym planie jest działaniem wyszukiwania i wykonywane jest inne wyszukiwanie, jeśli korzysta z istniejącej aktywności (np. jak działa rynek) I do tego singeTop jest dokładnie tym, co jestem po, ale dzięki za pomoc anyways) dzięki – Kman

+1

Hej, dzięki. Ten dobrze napisany post pomógł mi w szczypie. – icecreamman

+0

Dziękuję za szczegóły, szczególnie ten * (nawet jeśli zamiar został upuszczony, jego przybycie sprawiłoby, że zadanie pojawi się na pierwszym planie, gdzie pozostanie.) *, Które natychmiast usuwa moje zamieszanie. Zastanawiałem się tylko, co by było, gdyby pojedyncza czynność zadania nie znajdowała się na górze stosu, podczas gdy nadal chcę nawigować do niego bez określania 'FLAG_ACTIVITY_CLEAR_TOP'. – neevek

4

singleTask i singleInstance Działalność można rozpocząć jedynie zadania. Są zawsze w katalogu głównym stosu działań. Co więcej, urządzenie może pomieścić tylko jedną instancję działania naraz - tylko jedno takie zadanie.
dla więcej android:launchMode.

+0

ostatnie zdanie jest prawdziwe dla pojedynczej instancji, a nie pojedynczej maski –

+0

@ SerdarS. doceń swój komentarz. Dodanie więcej informacji o 'singleTask' - system tworzy nowe zadanie i tworzy jego instancję 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 metody 'onNewIntent()' zamiast tworzenia nowej instancji. W danym momencie może istnieć tylko jedno wystąpienie działania. więcej [developer.android.com] (https://developer.android.com/guide/components/activities/tasks-and-back-stack.html) –

+0

Rozumiem, a potem się myliłem. Przepraszam, że przeszkadzam. –

27

W prostej drodze,

singleTask:

System tworzy nową instancję zadania i aktywności u podstaw nowego zadania. Jeśli jednak instancja działania już istnieje w oddzielnym zadaniu, system kieruje intencję do istniejącej instancji poprzez wywołanie jej metody onNewIntent() zamiast tworzenia nowej instancji. Tylko aktywność one instance może istnieć w tym samym czasie.

Uwaga: Chociaż aktywność rozpoczyna się nowego zadania, przycisk Wstecz nadal zwraca uwagę użytkownika na poprzedniej działalności.

singleInstance-

samo jak "singleTask", chyba że system nie uruchamia żadnych innych działań w zadaniu sprawującego instancji. Działalność jest zawsze jedynym i jedynym członkiem jej zadania; wszelkie czynności rozpoczęte przez to otwarte w oddzielnym zadaniu.

Powiązane problemy