Znalazłem trochę kodów, aby programowo zamknąć aplikację na Androida. Wywołując dowolny z poniższych kodów w onDestroy (), czy całkowicie zamknie aplikację?
System.runFinalizersOnExit(true)
(LUB)android.os.Process.killProcess(android.os.Process.myPid());
Nie chcę uruchamiać aplikacji w tle po kliknięciu przycisku Zamknij. Pls sugerują, że mogę użyć dowolnego z tych kodów, aby zamknąć aplikację? Jeśli tak, jakiego kodu mogę użyć? Czy to dobry sposób na zamknięcie aplikacji na Androida?
Odpowiedzi:
Od API 16 możesz używać metody finishAffinity, która wydaje się być bardzo bliska zamknięcia wszystkich powiązanych działań według jej nazwy i opisu Javadoc:
this.finishAffinity ();
Od API 21 możesz użyć bardzo podobnego polecenia
finishAndRemoveTask ();
źródło
System.exit(0);
. Dziękuję za Twoją odpowiedź! Wreszcie znalazłem dobre rozwiązanie.System.exit(0)
jest to jedyne rozwiązanie, które działało dla mnie.jest to najlepszy sposób na zamknięcie aplikacji. !!!
Najlepsze rozwiązanie dla mnie.
źródło
System.exit(0);
. Odpowiednie rozwiązanie zostało opublikowane przez @sivi (jego odpowiedź znajduje się powyżej)finishAffinity();
System.exit(0);
Jeśli będziesz używać tylko
finishAffinity();
bezSystem.exit(0);
aplikacji, aplikacja zostanie zamknięta, ale przydzielona pamięć będzie nadal używana przez telefon, więc ... jeśli chcesz mieć czystą i naprawdę zamkniętą aplikację, użyj obu z nich.Jest to najprostsza metoda i działa wszędzie. Wyjdź z aplikacji na poważnie, możesz mieć dużo otwartej aktywności, a mimo to zakończyć wszystko bez problemu.
przykład na kliknięcie przycisku
lub jeśli chcesz czegoś ładnego, na przykład z oknem dialogowym z 3 przyciskami TAK NIE i ANULUJ
źródło
System.exit(0);
Nie powinieneś zwalniać tej pamięci, system zrobi to za ciebie, jeśli zajdzie taka potrzeba. To jest zamierzone zachowanie.Zastanów się, czy musisz zabić aplikację: dlaczego nie pozwolić systemowi operacyjnemu dowiedzieć się, gdzie i kiedy zwolnić zasoby?
W przeciwnym razie, jeśli jesteś absolutnie pewien, użyj
W reakcji na komentarz apleta @dave: Najpierw przeczytaj dużą kombinację pytań / odpowiedzi @gabriel: Czy rezygnacja z aplikacji jest niezadowolona ?
Teraz, zakładając, że tak jest, pytanie tutaj wciąż ma odpowiedź, ponieważ kod, którego potrzebujesz, jeśli robisz cokolwiek z rezygnacją, to
finish()
. Oczywiście możesz mieć więcej niż jedną aktywność itp., Ale nie o to chodzi. Pozwala uruchomić niektóre przypadki użyciaOstatecznie rzecz jasna
finish()
nic nie zabija, ale myślę, że nadal jest to narzędzie, którego potrzebujesz. Jeśli istnieje przypadek użycia dla „zabicia wszystkich działań”, jeszcze go nie znalazłem.źródło
finish()
nie zabije aplikacji.finish()
jest używany cały czas:Call this when your activity is done and should be closed.
to ten sam efekt, co naciśnięcie przycisku „wstecz”.Activity
(nieApplication
). Na przykład możesz rozpocząć nowe działanie, aby pokazać użytkownikowi pewne informacje. Po upływie limitu czasu lub po naciśnięciu przycisku „OK” możesz zadzwonić,finish()
aby powrócić do czynności wywoływania.Myślę, że w niektórych przypadkach aplikacja powinna zostać zabita. Na przykład istnieje aplikacja, z której można korzystać tylko po zalogowaniu. Aktywność logowania ma dwa przyciski: „login” i „Cancel”. Kliknięcie przycisku „Anuluj” oznacza zdecydowanie „Zakończ aplikację”. Nikt nie chce aplikacji w tle. Zgadzam się więc, że niektóre przypadki wymagają wyłączenia aplikacji.
źródło
Utwórz a
ExitActivity
i zadeklaruj to w manifeście. I wzywajExitActivity.exit(context)
do opuszczenia aplikacji.źródło
W Androidzie nie ma aplikacji zamykającej się, SampleActivity.this.finish (); zakończy bieżącą aktywność.
Kiedy przełączasz się z jednej czynności na drugą, kontynuuj poprzednią
źródło
Przede wszystkim takie podejście wymaga min Api 16.
Podzielę to rozwiązanie na 3 części, aby szerzej rozwiązać ten problem.
1. Jeśli chcesz zamknąć aplikację w działaniu, użyj tego fragmentu kodu:
2. Jeśli chcesz zamknąć aplikację w klasie innej niż Activity, która ma dostęp do Activity, użyj tego fragmentu kodu:
3. Jeśli chcesz zamknąć aplikację w klasie innej niż Activity i nie możesz uzyskać dostępu do Activity, takiej jak Service, polecam użyć BroadcastReceiver. Możesz dodać to podejście do wszystkich swoich działań w swoim projekcie.
Utwórz zmienne instancji LocalBroadcastManager i BroadcastReceiver. Jeśli chcesz, możesz zastąpić getPackageName () + „. Closeapp”.
Dodaj je do metody działania OnCreate ().
Nie zapomnij też wywołać funkcji wyrejestrowania odbiornika w metodzie działania onDestroy ()
Aby zakończyć aplikację, musisz wysłać transmisję za pomocą LocalBroadcastManager, którego używam w mojej klasie PlayService, która rozszerza usługę.
źródło
Możesz używać
finishAndRemoveTask ()
z API 21źródło
To zależy od tego, jak szybko chcesz zamknąć aplikację.
Bezpiecznym sposobem na zamknięcie Twojej aplikacji jest finishAffinity ();
Zamyka aplikację po zakończeniu przetwarzania wszystkich procesów. Może to wymagać trochę czasu. Jeśli zamkniesz aplikację w ten sposób i uruchomisz ją ponownie po krótkim czasie, możliwe, że Twoja nowa aplikacja działa w tym samym procesie. Ze wszystkimi nieukończonymi procesami i obiektami singletonowymi starej aplikacji.
Jeśli chcesz mieć pewność, że Twoja aplikacja jest całkowicie zamknięta, użyj System.exit (0);
Spowoduje to natychmiastowe zamknięcie Twojej aplikacji. Ale możliwe jest, że uszkodzisz pliki, które otworzyła Twoja aplikacja lub edytowanie wspólnych preferencji się nie zakończy. Więc używaj tego ostrożnie.
Jeśli używasz watchdoga w połączeniu z długo działającym zadaniem, możesz zobaczyć wpływy różnych metod.
To zabija twoją aplikację po 2 sekundach bez wyświetlania okna dialogowego ANR lub czegoś podobnego. Jeśli usuniesz System.exit (0) , uruchom ten kod i uruchom ponownie aplikację po jej zamknięciu, wystąpią dziwne zachowania, ponieważ nieskończona pętla nadal działa.
źródło
Lepiej skorzystaj,
finish()
jeśli jesteś wActivity
lubgetActivity().finish()
jeśli jesteś wFragment
.Jeśli chcesz całkowicie zamknąć aplikację, użyj:
źródło
Łatwy i prosty sposób na wyjście z aplikacji
źródło
Chcemy kodu, który jest solidny i prosty. To rozwiązanie działa na starszych urządzeniach i nowszych urządzeniach.
źródło
Myślę, że właśnie tego szukasz
źródło
źródło
Podobne do @MobileMateo, ale w Kotlinie
źródło
Nie jestem pewny, czy to się marszczy, czy nie, ale tak to robię ...
Krok 1 - Zazwyczaj mam klasę, która zawiera metody i zmienne, do których chcę uzyskać dostęp globalnie. W tym przykładzie nazywam to klasą „App”. Utwórz statyczną zmienną Activity wewnątrz klasy dla każdego działania, które ma Twoja aplikacja. Następnie utwórz metodę statyczną o nazwie „close”, która uruchomi tę
finish()
metodę dla każdej ze zmiennych Activity, jeśli NIE są one zerowe . Jeśli masz aktywność główną / rodzicielską, zamknij ją na końcu:Krok 2 - w każdej ze swoich czynności zastąp metody
onStart()
ionDestroy()
. WonStart()
ustaw zmienną statyczną w swojej klasie aplikacji na „this
”. WonDestroy()
ustaw wartość równąnull
. Na przykład w klasie „Activity1”:Krok 3 - Jeśli chcesz zamknąć aplikację, po prostu zadzwoń
App.close()
z dowolnego miejsca. Wszystkie tworzone instancje zostaną zamknięte! Ponieważ tylko zamykasz działania, a nie zabijasz samej aplikacji (jak w twoich przykładach), Android może przejąć stamtąd i wykonać niezbędne porządki.Znów nie wiem, czy byłoby to z jakiegoś powodu krzywdzone. Jeśli tak, chciałbym przeczytać komentarze na temat tego, dlaczego tak jest i jak można to poprawić!
źródło
api>=16
użytkufinishAffinity()
innego użyj tej metody.Czy odrzucenie aplikacji jest niezadowolone? . Przejdź przez ten link. Odpowiada na twoje pytanie. System wykonuje zadanie polegające na zabiciu aplikacji.
Załóżmy, że masz dwie czynności A i B. Poruszasz się od A do B. Po kliknięciu przycisku Wstecz aktywność B zostaje wyrzucona z plecaka i zniszczona. Poprzednia aktywność w czynności A stosu tylnego jest skoncentrowana.
Powinieneś pozostawić to systemowi, aby zdecydował, kiedy zabić aplikację.
pustka publiczna
finish()
Zadzwoń, gdy aktywność zostanie zakończona i powinna zostać zamknięta.
Załóżmy, że masz wiele działań. możesz użyć paska akcji. Po kliknięciu ikony strony głównej przejdź do MainActivity aplikacji. W MainActivity kliknij przycisk Wstecz, aby wyjść z aplikacji.
źródło
Aby wyjść z aplikacji, możesz użyć:
Aby również zatrzymać usługi, wywołaj następującą metodę:
źródło
Może to być bardzo późno, a także zgodnie z wytycznymi nie powinieneś sam zajmować się cyklem życia (tak jak robi to OS). Sugeruje się, aby zarejestrować odbiornik radiowy we wszystkich swoich działaniach za pomocą „
finish()
” w jegoonReceive()
i za każdym razem, gdy chcesz wyjść, możesz po prostu przekazać zamiar wskazujący, że wszystkie działania muszą zostać zamknięte ..... Pamiętaj jednak, aby to zrobić ” wyrejestruj odbiornik w swoichonDestroy()
metodach.źródło
To nie jest dobra decyzja, ponieważ jest niezgodna z zasadami przetwarzania aplikacji na Androida. Android nie zabija żadnego procesu, chyba że jest to absolutnie nieuniknione. Pomaga to aplikacjom uruchamiać się szybciej, ponieważ zawsze są przechowywane w pamięci. Potrzebujesz więc specjalnego powodu, by zabić proces aplikacji.
źródło
Prawidłowe i dokładne rozwiązanie, aby zamknąć aplikację po kliknięciu przycisku, wykorzystuje poniższy kod:
// Zdarzenie naciśnięcia przycisku Wstecz
źródło
Jeśli używasz Kotlina, właściwym sposobem na wyjście z aplikacji i alternatywą
System.exit()
jest wbudowana metodaZobacz dokumentację .
Liczba
0
jako parametr oznacza, że wyjście jest zamierzone i nie wystąpił błąd.źródło
To wszystko zabije;)
źródło
Spróbuj tego
źródło
Najłatwiejszy sposób, aby wyjść z aplikacji z działania, bez łamania logiki Androida i bez dodawania więcej kodu do istniejących działań i przekazywania dodatków to:
QuitApplicationActivity
samopoczucie:źródło
Odpowiedź @Sivi zamyka aplikację. Ale po powrocie, jeśli masz jakieś zajęcia dla dzieci, może zostać otwarte inne niedokończone działanie. Dodałem
noHistory:true
do moich działań, więc aplikacja po powrocie zaczyna się od MainActivity.źródło
Aby dodać jedną do listy brutalnych metod zamykania aplikacji:
Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
źródło
Process.killProcess(Process.myPid())
robi to samo, ale jest krótszymożesz zakończyć swoje pełne aplikacje. a zatem
będzie działać w 100%. Powodzenia!
źródło
Po prostu użyj Finish () na tylnym klawiszu naciśnij onKeypressed ()
źródło