piątek, 23 marca 2018

Jak powiązać aktywność z zadaniem - launchMode

Przede wszystkim można zadeklarować w manifeście dla danej aktyności(activity) odpowiednią wartość atrybutu launchMode:
  • standard
    • za każdym razem tworzone jest nowe wywołanie (instance) danej aktywności w zadaniu (task)
    • aktywność może być obecna w różnych zadaniach - będzie miała swoje oddzielne wywołania w każdym zadaniu, dla którego te wywołania były stworzone
    • aktywność może mieć kilka wywołań w jednym zadaniu - tyle ile razy dana aktywność była wywoływana
  • singleTop
    • nowe wywołanie danej aktywności tworzone jest tylko wtedy, jeśli wywoływana aktywność nie jest aktualnie na górze stosu (top of the stack)
    • gdy onNewIntent() powoduje wywołanie aktywności, która już jest na górze stosu, wtedy zamiast dodania na stos nowego wywołania, obecna aktywność jest aktualizowana o dane, które zawiera wywołanie
    • aktywność może być obecna w różnych zadaniach - będzie miała swoje oddzielne wywołania w każdym zadaniu, dla którego te wywołania były stworzone
    • aktywność może mieć kilka wywołań w jednym zadaniu - tyle ile razy dana aktywność była wywoływana przez inną aktywność (gdy nie była na górze stosu)
  • singleTask
    • nowe wywołanie danej aktywności tworzone jest tylko wtedy, gdy nie ma jeszcze żadnego wywołania tej aktywności w żadnym z zadań, wtedy też tworzone jest nowe zadnie a ta aktywność staje się jego początkową aktywnością
    • gdy onNewIntent() powoduje wywołanie aktywności, która już jest w jakimś zadaniu, wtedy zamiast tworzenia nowego wywołania, obecna tam aktywność jest aktualizowana o dane, które zawiera wywołanie
    • w systemie może być tylko jedno wywołanie danej aktywności
    • przycisk wstecz przenosi użytkownika do poprzedniej aktywności (tej, która wywołała daną aktywność), pomimo iż zostało stworzone nowe zadanie
  •  singleInstance
    • nowe wywołanie danej aktywności tworzone jest tylko wtedy, gdy nie ma jeszcze żadnego wywołania tej aktywności w żadnym z zadań, wtedy też tworzone jest nowe zadnie a ta aktywność staje się jego początkową aktywnością
    • gdy onNewIntent() powoduje wywołanie aktywności, która już jest w jakimś zadaniu, wtedy zamiast tworzenia nowego wywołania, obecna tam aktywność jest aktualizowana o dane, które zawiera wywołanie
    • w systemie może być tylko jedno wywołanie danej aktywności
    • przycisk wstecz przenosi użytkownika do poprzedniej aktywności (tej, która wywołała daną aktywność), pomimo iż zostało stworzone nowe zadanie 
    • wywołanie nowej aktywności przez daną aktywność powoduje stworzenie nowego zadania - aktywność z atrybutem singleInstance jest jedyną aktywnością w zadaniu
Domyślnie atrybut launchMode przyjmuje wartość standard.

Dzięki takiej deklaracji aktywność (o ile nie zostanie wywołana inaczej) będzie się zawsze zachowywać w wyznaczony sposób.
Jeżeli aktywność jednorazowo ma się zachować inaczej zamiast deklarować to w manifeście można wywołać ją poleceniem startActivity() z wybraną flagą:
  • FLAG_ACTIVITY_NEW_TASK - zadziała analogicznie do atrybutu singleTask,
  • FLAG_ACTIVITY_SINGLE_TOP - zadziała analogicznie do atrybutu singleTop,
  • FLAG_ACTIVITY_CLEAR_TOP - jeżeli wywoływana aktywność ma już swoje wywołanie w aktywnym zadaniu, to wszystkie aktywności, które są na stosie ponad nią, zostają zamknięte a ona sama jest aktualizowana.

Poniżej podsumowanie w tabeli przy założeniu, że przedstawione atrybuty dotyczą aktywności A, a aktywność B ma atrybut standard.



aktywność A jest wywoływana przez aktywność B


aktywność A nie ma wywołania w systemie aktywność A ma wywołanie w systemie aktywność A jest wywoływana przez aktywność A aktywność A wywołuje aktywność B wstecz z aktywności A
standard tworzy się nowe wywołanie danej aktywności na górze stosu tworzy się nowe wywołanie danej aktywności na górze stosu tworzy się nowe wywołanie danej aktywności na górze stosu tworzy się nowe wywołanie danej aktywności na górze stosu powrót do poprzedniej aktywności ze stosu
singleTop tworzy się nowe wywołanie danej aktywności na górze stosu tworzy się nowe wywołanie danej aktywności na górze stosu istniejące wywołanie jest aktualizowane tworzy się nowe wywołanie danej aktywności na górze stosu powrót do poprzedniej aktywności ze stosu
singleTask tworzy się nowe wywołanie danej aktywności w nowym zadaniu istniejące wywołanie aktywności A jest aktualizowane i przechodzi do głównego wątku istniejące wywołanie jest aktualizowane tworzy się nowe wywołanie danej aktywności na górze stosu powrót do poprzedniej aktywności z zadania, które wywołało aktywność A
singleInstance tworzy się nowe wywołanie danej aktywności w nowym zadaniu istniejące wywołanie aktywności A jest aktualizowane i przechodzi do głównego wątku istniejące wywołanie jest aktualizowane tworzy się nowe wywołanie danej aktywności w nowym zadaniu powrót do poprzedniej aktywności z zadania, które wywołało aktywność A

Brak komentarzy:

Prześlij komentarz