2011-11-04 11 views
7

Jeśli działanie A jest powiązane z zadaniem T1, a działanie B jest powiązane z zadaniem T2, jak mogę zakończyć działanie A z działania B?Jak zakończyć działanie z innej aktywności

Potrzebuję tego, ponieważ moja aplikacja może zostać uruchomiona ze skrótu lub powiadomień.

+0

Czy obie czynności stanowią część tej samej aplikacji? – FoamyGuy

+0

tak. aktywność a została uruchomiona normalnie, a aktywność B została uruchomiona, gdy aplikacja była w tle powiadomień zbiorczych. –

+0

Powiedziałbym, że należy użyć usługi [http://developer.android.com/guide/topics/fundamentals/services.html], nie patrzyłem na nią zbyt wiele, ale może ci się przydać. – user999717

Odpowiedz

0

Nie jestem pewien, co byłoby najlepsze podejście, ale jedno podejście mogłoby przejść Działanie A do Singleton i sprowadzić go z B i zrobić wykończenie() na nim ...

+0

zobacz mój komentarz powyżej –

+0

Możesz usunąć odniesienie z onStop lub coś podobnego ... – Warpzit

3

Podczas gdy inne podejścia mogą zadziałać, tym, co wydaje mi się najbardziej proste, jest wysłanie intencji do innego działania, które każe mu się zakończyć. Ta aktywność, po otrzymaniu tej intencji, wywołuje metodę finish().

+0

Gdybym to robił, chciałbym pójść z czymś takim. – FoamyGuy

+0

Nie jest dobrze utrzymywać odniesienia do działań w twoich aplikacjach, ponieważ system operacyjny nie zabije tej aktywności, gdy ma odniesienie. –

+0

To jest różne. Niż moja sugestia, ale to zadziała tylko wtedy, gdy działanie rozpoczęte z zamiarem jest takie samo jak działanie bieżące, a nie nowe. Nie wiem, jak to działa, gdy dzwonisz z intencją, więc nie możesz odpowiedzieć bez robienia testów. Mam nadzieję, że to ma sens ... – Warpzit

1

Inną alternatywą może być wywołanie działania B z przezroczystą górną flagą z programu obsługi powiadomień, np.

Intent intent = new Intent(context, HomeActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
context.startActivity(intent); 

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

Jeśli zestaw, a aktywność uruchamiana jest już uruchomiony w bieżącym zadaniu, a następnie zamiast uruchomienia nowej instancji tej działalności, wszystkie inne działania na wierzchu będzie zamknięte i ten zamiar zostanie dostarczony do (obecnie na górze) starej działalności jako nowy zamiar.

+0

usuwa wszystkie działania z tego zadania i nie wpływa na działania z innego zadania –

2

Potrzebowałem tych samych informacji i bawiłem się z tym, co tu powiedziałem, wymyśliłem to.

Intent intent = new Intent(MainActivity.this,HighScoresActivity.class); 
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(intent); 

Zmień działalności dopasowane do potrzeb, ale FLAG_ACTIVITY_CLEAR_TOP usuwa inne działania ze stosu.

Powiązane problemy