Mam aplikację, w której na stronie głównej mam przyciski do nawigacji po aplikacji.
Na tej stronie mam przycisk „EXIT”, który po kliknięciu powinien przenieść użytkownika na ekran główny telefonu, na którym znajduje się ikona aplikacji.
Projekt Androida nie sprzyja opuszczaniu aplikacji z wyboru, ale raczej zarządza nią przez system operacyjny. Możesz wywołać aplikację Home, odpowiadającą jej celom:
czy przeniesie wszystkie zasoby? Ponieważ kiedy wychodzę z aplikacji w ten sposób i po pewnym czasie ponownie klikam ikonę aplikacji. Zaczyna się od miejsca, w którym go zostawiłem. Oznacza to, że aplikacja nadal działała w tle.
Załóżmy, że w naszej aplikacji mamy szereg działań (powiedzmy dziesięć) i musimy wyjść bezpośrednio z tego działania. Co możemy zrobić, to stworzyć intencję i przejść do działania roota i ustawić flagę w intencji jako
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
dodaj też dodatkowe intencje, takie jak boolean
intent.putExtra("EXIT",true);
Następnie w działaniu root sprawdź wartość booleani zgodnie z tym wywołaniem kończącym () w onCreate()działaniu root
Myślę, że to najlepsze podejście do wyjątkowych okoliczności. Powiedz o aplikacji, która potrzebuje Internetu, a połączenie przerywa kilka czynności w aplikacji. Można wyświetlić okno dialogowe z ostrzeżeniem (bez przycisków). Przycisk Wstecz musi wyjść z całej aplikacji, ponieważ ponowne wejście wymaga ponownego zalogowania / zainicjowania. System.exit to jedyna rzecz, która działa rozsądnie, którą znalazłem. Nie jestem jednak pewien co do komentarza @ user1699548.
Następnie w metodzie MainActivity onCreate () dodaj to, aby zakończyć MainActivity
setContentView(R.layout.main_layout);if( getIntent().getBooleanExtra("Exit me",false)){
finish();return;// add this to prevent from doing unnecessary stuffs}
To mi nie działa. Nie pozostawia mojej aplikacji widocznej, ale nadal działa. Widzę wątki wiszące i czekające w debuggerze, które nigdy nic nie zrobią.
@beetree Tak. Jak każda zła praktyka, zdarzają się przypadki, gdy jest to twoja jedyna opcja i używasz jej, ponieważ próba zrobienia czegoś innego byłaby bezsensowna. Chodzi o to, że jest to zła praktyka , w przeciwieństwie do nielegalnej składni , dlatego, że jest dostępna w tych kilku przypadkach, ale powinieneś spróbować swoich sił, aby znaleźć lepszy sposób na to. W twoim przypadku nie ma takiego.
Niektórych działań nie chcesz ponownie otwierać po naciśnięciu przycisku Wstecz, np. Aktywność ekranu powitalnego, Aktywność ekranu powitalnego, Windows z potwierdzeniem. W rzeczywistości nie potrzebujesz tego w stosie działań. możesz to zrobić za pomocą => otwórz plik manifest.xml i dodaj atrybut
Czasami chcesz zamknąć całą aplikację po pewnym naciśnięciu przycisku Wstecz. Tutaj najlepszą praktyką jest otwieranie okna głównego zamiast zamykania aplikacji. W tym celu należy zastąpić metodę onBackPressed (). zwykle ta metoda otwiera najwyższą aktywność na stosie.
@Overridepublicvoid onBackPressed(){Intent a =newIntent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);}
LUB
Po naciśnięciu przycisku Wstecz chcesz wyjść z tego działania, a także nie chcesz dodawać tego do stosu działań. Wywołaj metodę finish () wewnątrz metody onBackPressed (). nie spowoduje to zamknięcia całej aplikacji. przejdzie do poprzedniej aktywności na stosie.
(Próbowałem wcześniejszych odpowiedzi, ale brakuje im niektórych punktów. Na przykład, jeśli nie wykonasz czynności return;po zakończeniu, pozostanie kod aktywności jest uruchamiany. Musisz także edytować onCreate z return. Jeśli nie uruchomisz super.onCreate () pojawi się błąd czasu wykonywania)
@Overridepublicvoid onCreate(Bundle savedInstanceState){
mContext = getApplicationContext();super.onCreate(savedInstanceState);if(getIntent().getBooleanExtra("EXIT",false)){
finish();return;}// your current codes// your current codes}
Kiedy wywołasz metodę wykończenia, wywołana zostanie funkcja onDestroy () tego działania, która powróci do poprzedniej czynności na stosie działań ... Więc ... w celu zakończenia nie wywołuj metody finish ();
Próbowałem wyjść z aplikacji przy użyciu następującego fragmentu kodu, to zadziałało dla mnie. Mam nadzieję, że to ci pomoże. Zrobiłem małe demo z 2 aktywnościami
jeśli chcesz wyjść z aplikacji, umieść ten kod pod swoją funkcją
publicvoid yourFunction(){
finishAffinity();
moveTaskToBack(true);}//For an instance, if you want to exit an application on double click of a //button,then the following code can be used.@Overridepublicboolean onKeyDown(int keyCode,KeyEventevent){if(keyCode ==KeyEvent.KEYCODE_BACK &&event.getRepeatCount()==2){// do something on back.FromAndroid16+ you can use the following:
finishAffinity();
moveTaskToBack(true);}returnsuper.onKeyDown(keyCode,event);}
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.