2012-07-26 8 views
19

Przeczytałem przewodnik programisty dla programistów Androida i kilka artykułów w Internecie. Nadal nie mam pojęcia, co to jest singleTasklaunchmode. Weźmy przykład:Informacje o trybie androidowym "singleTask"

Użytkownik uruchamia aplikację1, Android rozpoczyna nowe zadanie. Załóżmy, że Apl1 tworzy działania w celu obserwacji:

ActivityA -> ActivityB -> ActivityC 

Tak Zadania1 wygląda.

Następnie użytkownik kliknij ustandaryzowanej domu i zdecydować się na uruchomienie APP2, więc Zadania1 idzie w tle i Android rozpocząć nowe zadanie: task2, użytkownik robi coś:

ActivityD -> ActivityE 

teraz powiedzmy, ActivityE próbie uruchomienia ActivityB, i ActivityB ma tryb uruchamiania singleTask.

Rozumiem, że zadanie 1 pojawia się ponownie w interfejsie, a zadanie 2 przechodzi w tło. I Zadania1 wygląda teraz tak:

ActivityA -> ActivityB 

Co oznacza:

  1. ActivityC zostanie usunięty z Zadania1 i ActivityB staje na górę działalności.

  2. Jeśli użytkownik teraz kliknąć na przycisk „Wstecz”, przyjdzie do ActivityA z Zadania1 zamiast tyłu do ActivityE z task2

mam rację?

Dzięki

Odpowiedz

6

ActivityC zostanie usunięty z Zadania1 i ActivityB staje do góry Aktywność.

Tak masz rację ...

ActivityC zostanie usunięty z to metoda onDestroy z ActivityC zostanie wywołana. W związku z tym, gdy użytkownik ponownie uruchamia zadanie 1, zamiast niego wyświetlana jest wartość ActivityB.

Utworzono 2 zadania (projekty) i przesłano tę samą @SendSpace. Wypróbuj to...

Jeśli spojrzeć na androidy documentation mówi

"A«singleTask»aktywność pozwala inne działania, aby być częścią jej zadania. To zawsze u podstaw swojego zadania, ale inne działania (niekoniecznie«standard» i działania "singleTop") mogą zostać uruchomione w tym zadaniu. "

Co oznacza, że ​​po kliknięciu przycisku strony głównej wszystkie czynności powyżej pojedynczego zadania zadania (które w Twoim przypadku to CzynnośćB) są usuwane ze stosu.

W przykładowej aplikacji, którą podałem wcześniej, po uruchomieniu projektu "AndroidTest" i kliknięciu przycisku strony głównej w dziennikach widać, że drugie działanie jest ustawione na Wstrzymanie, a po ponownym uruchomieniu z poziomu Lista "Ostatnia aplikacja" powoduje, że drugie działanie zostało zniszczone.

W senario, w którym aktywność nad aktywnością pojedynczych wystąpień (aktywność B) nie jest usuwana z tylnego stosu, a inna aplikacja żąda tego działania (aktywność B), może nie być wyświetlana i zamiar może zostać usunięty. Ale ma to zdecydowanie mniejsze szanse, ponieważ użytkownik będzie musiał nacisnąć przycisk Początek, ale bieżące zadanie \ App w BackStack, zanim będzie mógł przejść do innego zadania \ App.

Stąd ostrzeżenie

Pozostałe tryby - singleTask i singleInstance - nie są odpowiednie dla większości zastosowań, ponieważ wynikają one w modelu interakcji, która może być obca dla użytkowników i bardzo różni się od większości innych Aplikacje.

Mam nadzieję, że rozwiąże to Twoje wątpliwości.

+0

dziękuję, ale odpowiedź w tym wpisie sprawia, że ​​mylę: http://stackoverflow.com/questions/3219726/android-singletask- lub -jedenzwiązanie-uruchamiania-trybu nie ma nigdy więcej niż jednego wystąpienia działania "singleTask" lub "singleInstance", więc instancja powinna obsłużyć wszystkie nowe intencje ... Jednak działanie "singleTask" może lub nie mieć inne czynności nad nim w stosie. Jeśli tak, to nie jest w stanie poradzić sobie z intencją, a zamiar zostaje odrzucony. (Mimo że zamiar został odrzucony, jego nadejście spowodowałoby, że zadanie pojawi się na pierwszym planie, gdzie pozostanie.) – cn1h

+1

"Oznacza to, że po kliknięciu przycisku strony głównej wszystkie działania powyżej pojedynczego zadania zadania (które w twoim case is ActivityB) są usuwane ze stosu. " Po prostu znalazłem to w projekcie, tak jest w tym przypadku. Dzięki. –

+0

Łącze "Sendspace" jest zepsute –

18

Mówisz rację.

Dlaczego nie przetestujesz tego.

Istnieje również ta aplikacja, która może pomóc wyjaśnić tryb uruchomienia:

https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode

enter image description here

źródła są w https://github.com/gnorsilva/Activities-LaunchMode-demo

+0

dzięki, ale co im mylące jest to dokument: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode Mówi: W przeciwieństwie do "singleTask" i Działania "singleInstance" mogą rozpoczynać tylko zadanie. Są zawsze w katalogu głównym stosu działań. – cn1h

+1

W demo jest błąd. Po uruchomieniu nowej czynności, której trybem jest "singleTask", działanie będzie zawsze tworzone w nowym zadaniu. Ale tak naprawdę będzie ono tworzone tylko w nowym zadaniu, jeśli ustawisz ** taskAffinity ** dla działania. – smileVann

+1

https://github.com/gnorsilva/Activities-LaunchMode-demo/issues/2 –

Powiązane problemy