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?


Sprawdź tę odpowiedź , mi się przydała.
Daniyar

Odpowiedzi:


239

Wystarczy zadzwonić finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

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



8

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

<activity
            ...
            android:noHistory="true">
</activity>

7

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


4

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

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();

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.


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


0

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

startActivity(new Intent(this, newactivity.class));
finish();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.