Jak zabić aktywność Androida, opuszczając ją, aby nie można było uzyskać do niej dostępu z przycisku Wstecz?

132

W przypadku danego działania na Androidzie chciałbym w pewnym momencie rozpocząć nową aktywność dla użytkownika. Gdy opuszczą pierwsze działanie i dotrą do drugiego, pierwsze działanie jest nieaktualne i chcę je całkowicie usunąć, aby nie można było ponownie uzyskać do niego dostępu za pomocą przycisku Wstecz.

Jak najlepiej to osiągnąć? Jak zabić lub zniszczyć tę aktywność natychmiast po uruchomieniu nowej aktywności przez użytkownika?

JohnRock
źródło
Sprawdź tę odpowiedź , mi się przydała.
Daniyar

Odpowiedzi:

239

Wystarczy zadzwonić finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
źródło
Dziękuję Ci. Aby pójść o krok dalej, rozpoczynam nowe działanie z okna dialogowego - czy kod będzie działał w ten sam sposób?
JohnRock
@ CaseyB dzięki za to .. ale chcę wiedzieć, czy mogę wywołać tę metodę z usługi, jeśli tak, to w jaki sposób?
swiftBoy
1
Usługi nie mają aktywności, co oznacza, że ​​nie będą znajdować się na stosie aktywności, do którego można wrócić. Jeśli chcesz zabić jakąś aktywność ze swojej usługi, powinieneś być w stanie wywołać myActivity.finish ();
CaseyB
3
To odpowiedź sprzed 7 lat, ale nadal ważna dla Androida M i N.
zeeshan
1
@juztcode onDestroyto metoda cyklu życia, która ma być wywoływana tylko ze struktury systemu Android.
CaseyB
106

Ustawienie android:noHistory="true"działania w manifeście spowoduje usunięcie działania ze stosu za każdym razem, gdy zostanie ono opuszczone. zobacz tutaj

jqpubliq
źródło
11

możesz użyć:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
źródło
ciekawy! co dokładnie oznacza „FLAG_ACTIVITY_NO_HISTORY”?
Armando Marques Sobrinho
8

Możesz również dodać android:noHistory="true"do swojego Activitytagu w AndroidManifest.xml.

<activity
            ...
            android:noHistory="true">
</activity>
Danke Xie
źródło
7

Tak, wszystko, co musisz zrobić, to wywołać funkcję finish () w dowolnym działaniu, które chcesz zamknąć.

RobGThai
źródło
4

Napisz to w każdym „nowym działaniu” po zainicjowaniu nowej intencji->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();
JBL AK-47
źródło
2

Wreszcie znalazłem rozwiązanie!

Mój kontekst to : - Chcę rozłączyć połączenie przez gniazdo, gdy aktywność została zniszczona, próbowałem zakończyć () działanie, ale to nie zadziałało , jego utrzymywanie połączenia gdzieś jest na żywo.

więc używam android.os.Process.killProcess(android.os.Process.myPid()); jego zabicia mojej aktywności i użyłem android:excludeFromRecents="true" do usunięcia z ostatniej aktywności.

iamkdblue
źródło
1
To rozwiązanie działało u mnie, ale niestety pokazuje pustą stronę i aby zamknąć połączenie przez gniazdo możesz użyć socket.close (); .
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())zabija proces aplikacji, a nie tylko aktywność. Oznacza to, że wszelkie bieżące usługi (w tle lub na pierwszym planie) również zostaną zatrzymane.
Wrichik Basu
1

Dodaj ten atrybut do swojej aktywności w pliku manifestu. android: noHistory = "true"

Mayuran Balasubramaniam
źródło
0

Po uruchomieniu nowej aktywności wystarczy użyć poniższego kodu.

startActivity(new Intent(this, newactivity.class));
finish();
Soni Kumar
źródło