Jak programowo zamknąć aplikację na Androida


321

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ę?

  1. System.runFinalizersOnExit(true)
    (LUB)
  2. 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?




użyj „System.exit (0);” kiedy naprawdę chcesz wyjść z aplikacji. Zrobiłem to w przypadku nieodwracalnego błędu po wyświetleniu użytkownikowi komunikatu. W razie potrzeby możesz nawet automatycznie ponownie uruchomić aplikację za pomocą AlarmManager. Zobacz: blog.janjonas.net/2010-12-20/…
Ktoś gdzieś

Odpowiedzi:


397

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 ();

Zakończ to działanie, a także wszystkie działania bezpośrednio pod nim w bieżącym zadaniu, które mają to samo powinowactwo. Jest to zwykle używane, gdy aplikacja może zostać uruchomiona do innego zadania (na przykład z ACTION_VIEW typu treści, który rozumie), a użytkownik skorzystał z nawigacji w górę, aby przełączyć się z bieżącego zadania do własnego. W takim przypadku, jeśli użytkownik przejdzie w dół do innych działań drugiej aplikacji, wszystkie z nich powinny zostać usunięte z pierwotnego zadania jako część przełącznika zadań.

Pamiętaj, że to wykończenie nie pozwala na dostarczenie wyników do poprzedniej aktywności, a wyjątek zostanie zgłoszony, jeśli spróbujesz to zrobić.


Od API 21 możesz użyć bardzo podobnego polecenia

finishAndRemoveTask ();

Kończy wszystkie działania w tym zadaniu i usuwa je z listy ostatnich zadań.


28
Zdecydowanie jest to właściwa odpowiedź! Nie jest dobrym rozwiązaniem, aby zakończyć korzystanie z aplikacji System.exit(0);. Dziękuję za Twoją odpowiedź! Wreszcie znalazłem dobre rozwiązanie.
Antonio

4
Czy wiesz, czy istnieje inne rozwiązanie w API 14? Dzięki
Script Kitty,

2
Możesz zakończyć () każdą czynność indywidualnie, albo po zamknięciu aplikacji, albo w cyklu życia aktywności.
sivi

3
OSTRZEŻENIE! this.finishAffinity () zamyka aplikację usuwającą ją z pamięci, więc nie będziesz otrzymywać wiadomości push itd.
Tincho825

7
To rozwiązanie działa w 99% przypadków. Jednak nie zniszczy procesu, więc na przykład Sztylet nie zostanie wyczyszczony. W tych rzadkich przypadkach, w których wymagane jest zabicie procesu, System.exit(0)jest to jedyne rozwiązanie, które działało dla mnie.
Slav

155
getActivity().finish();
System.exit(0);

jest to najlepszy sposób na zamknięcie aplikacji. !!!

Najlepsze rozwiązanie dla mnie.


tak, działa świetnie! Musisz zadzwonić z MainActivity, aby działało!
mz87

Idealne rozwiązanie. Nie ma potrzeby przerywania procesu, ponieważ Android najlepiej zna się na zarządzaniu pamięcią. Jest to jednak rozwiązanie umożliwiające zakończenie działania, a także wyjście z aplikacji dla wygody użytkownika.
IAmTheSquidward

Naprawdę idealne rozwiązanie. Naprawiono wiele problemów. Dzięki.
superuserdo

26
Nie sądzę, że to dobre rozwiązanie. Nie powinieneś kończyć korzystania z programu System.exit(0);. Odpowiednie rozwiązanie zostało opublikowane przez @sivi (jego odpowiedź znajduje się powyżej)
Antonio

13
to nie jest rozwiązanie, nie działa, jeśli masz stos działań
user3290180

46

finishAffinity();

System.exit(0);

Jeśli będziesz używać tylko finishAffinity();bez System.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

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

lub jeśli chcesz czegoś ładnego, na przykład z oknem dialogowym z 3 przyciskami TAK NIE i ANULUJ

// alertdialog for exit the app
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

// set the title of the Alert Dialog
alertDialogBuilder.setTitle("your title");

// set dialog message
alertDialogBuilder
        .setMessage("your message")
        .setCancelable(false)
        .setPositiveButton("YES"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // what to do if YES is tapped
                        finishAffinity();
                        System.exit(0);
                    }
                })

        .setNeutralButton("CANCEL"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on CANCEL tapped
                        dialog.cancel();
                    }
                })

        .setNegativeButton("NO"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on NO tapped
                        dialog.cancel();
                    }
                });

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

3
to jest poprawna odpowiedź, której szukałem. dzięki
driftwood

jeśli używałbym FCM lub zadań w tle w mojej aplikacji, nie miałbym problemu?
roghayeh hosseini

Właśnie tego potrzebowałem, aby wymazać aplikację z pamięci
A1m

proszę nie używać System.exit(0);Nie powinieneś zwalniać tej pamięci, system zrobi to za ciebie, jeśli zajdzie taka potrzeba. To jest zamierzone zachowanie.
crgarridos

30

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

finish();

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życia

  1. Chcesz, aby użytkownik rzucił wszystko ze względu na zużycie pamięci i „nie działa w tle? Wątpliwe. Pozwól użytkownikowi zatrzymać określone działania w tle, ale pozwól systemowi operacyjnemu zabić wszelkie niepotrzebne odwołania.
  2. Chcesz, aby użytkownik nie przechodził do poprzedniej aktywności Twojej aplikacji? Cóż, albo skonfiguruj to, żeby nie działało, albo potrzebujesz dodatkowej opcji. Jeśli przez większość czasu działa wstecz = poprzednia aktywność, czy użytkownik nie po prostu naciska domu, jeśli chce zrobić coś innego?
  3. Jeśli potrzebujesz resetowania, możesz dowiedzieć się, czy / jak / etc Twoja aplikacja została zamknięta, a jeśli aktywność znów się skupi, możesz podjąć działania w tym celu, pokazując nowy ekran zamiast restartować się tam, gdzie byłeś.

Ostatecznie 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.


30
Wywołanie 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”.
Tanner Perrien

Wykończenie zabije aktywność. czym to się różni od zabicia aplikacji?
Nanne

Nie ma nic złego w „kończeniu” lub „zabijaniu” Activity(nie Application). 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.
Tanner Perrien

42
Większość aplikacji na Androida ma więcej niż jedną aktywność.
CommonsWare

4
@Nanne - ekran blokady jest przykładem tego, kiedy chcesz zatrzymać wszystkie działania. Załóżmy, że logujesz się do aplikacji bankowej. Po pewnym czasie bez interakcji użytkownika uruchamia się ekran blokady. Będziesz chciał zatrzymać wszystkie czynności, jeśli ktoś naciśnie przycisk Wstecz na ekranie blokady!
Jabari

19

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.


2
Całkowicie zgadzam się z tym przypadkiem użycia. Weź również pod uwagę moją bezpieczną aplikację, która musi być dostępna w określonej lokalizacji i najlepiej jest ją zamknąć, jeśli użytkownika nie ma w tej lokalizacji. Co ja robię?
Sydwell

18

Utwórz a ExitActivityi zadeklaruj to w manifeście. I wzywaj ExitActivity.exit(context)do opuszczenia aplikacji.

public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish();
    }

    public static void exit(Context context) {
        Intent intent = new Intent(context, ExitActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }

}

To najczęściej głosowana odpowiedź, jednak jest to hack. Wywołanie zakończenia w onCreate będzie wyglądać glitchy na większości, jeśli nie na wszystkich urządzeniach.
DoruChidean

Hmm, to hack, ale nie usterka. Najpierw wywołujesz exit (), pojawia się on na szczycie wszystkich działań z jasnym szczytem i zadaniami, a następnie kończy się. tutaj WYJŚCIE.
vivek

1
Pamiętaj, aby zadeklarować tę klasę w swoim manifeście. +1 za sprytny hack.
Taslim Oseni

To działało! głosowano
TuanDPH,

17

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ą

Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class);
startActivity(homeintent);
SampleActivity.this.finish();

13

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:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    finishAndRemoveTask();
}

2. Jeśli chcesz zamknąć aplikację w klasie innej niż Activity, która ma dostęp do Activity, użyj tego fragmentu kodu:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    getActivity().finishAndRemoveTask();
}

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”.

LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(getPackageName()+".closeapp")){
            if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
                finishAffinity();
            } else if(Build.VERSION.SDK_INT>=21){
                finishAndRemoveTask();
            }
        }
    }
};

Dodaj je do metody działania OnCreate ().

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);

Nie zapomnij też wywołać funkcji wyrejestrowania odbiornika w metodzie działania onDestroy ()

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

Aby zakończyć aplikację, musisz wysłać transmisję za pomocą LocalBroadcastManager, którego używam w mojej klasie PlayService, która rozszerza usługę.

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));

10

Możesz używać finishAndRemoveTask ()z API 21

public void finishAndRemoveTask ()

Kończy wszystkie działania w tym zadaniu i usuwa je z listy ostatnich zadań.


8

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.

new ANRWatchDog(2000).setANRListener(new ANRWatchDog.ANRListener() {
    public void onAppNotResponding(ANRError error) {
        MainActivity.this.finishAffinity();
        System.exit(0);
    }
}).start();
for(int i = 0; i < 10; ++i){
    --i;
}

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.


8

Lepiej skorzystaj, finish()jeśli jesteś w Activitylub getActivity().finish()jeśli jesteś w Fragment.

Jeśli chcesz całkowicie zamknąć aplikację, użyj:

getActivity().finish();
System.exit(0);

6

Łatwy i prosty sposób na wyjście z aplikacji

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);

Czy to po prostu wyświetla ekran główny, czy faktycznie zabija aplikację?
rpattabi

6

Chcemy kodu, który jest solidny i prosty. To rozwiązanie działa na starszych urządzeniach i nowszych urządzeniach.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        getActivity().finishAffinity();
    } else{
        getActivity().finish();
        System.exit( 0 );
    }

5

Myślę, że właśnie tego szukasz

activity.moveTaskToBack(Boolean nonRoot);


5

Podobne do @MobileMateo, ale w Kotlinie

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    this.finishAffinity()
} else{
    this.finish()
    System.exit(0)
}

4

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:

public class App
{
    ////////////////////////////////////////////////////////////////
    // INSTANTIATED ACTIVITY VARIABLES
    ////////////////////////////////////////////////////////////////

        public static Activity activity1;
        public static Activity activity2;
        public static Activity activity3;

    ////////////////////////////////////////////////////////////////
    // CLOSE APP METHOD
    ////////////////////////////////////////////////////////////////

        public static void close()
        {
            if (App.activity3 != null) {App.activity3.finish();}
            if (App.activity2 != null) {App.activity2.finish();}
            if (App.activity1 != null) {App.activity1.finish();}
        }
}

Krok 2 - w każdej ze swoich czynności zastąp metody onStart()i onDestroy(). W onStart()ustaw zmienną statyczną w swojej klasie aplikacji na „ this”. W onDestroy()ustaw wartość równą null. Na przykład w klasie „Activity1”:

@Override
public void onStart()
{
    // RUN SUPER | REGISTER ACTIVITY AS INSTANTIATED IN APP CLASS

        super.onStart();
        App.activity1 = this;
}

@Override
public void onDestroy()
{
    // RUN SUPER | REGISTER ACTIVITY AS NULL IN APP CLASS

        super.onDestroy();
        App.activity1 = null;
}

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ć!


Ciekawe, ja też byłbym zainteresowany tym, co myślą o tym inni doświadczeni programiści Androida.
Rudi Kershaw

4
Trzymając odniesienie do swojej aktywności, w rzeczywistości wyciek pamięci! Zobacz to, aby uzyskać szczegółową dyskusję.
Managarm

@Managarm Założeniem tego postu jest to, że zmienna statyczna pozostanie nawet po zniszczeniu procesu (w tym przypadku Aktywności). Jeśli jednak zostanie wykonane prawidłowe czyszczenie domu, nie będzie to stanowić problemu ... stąd przyczyna anulowania odwołania w metodzie onDestroy () działania.
Jabari

@Jabari Ah, tęskniłem za częścią onDestroy. W takim przypadku nie powinno to stanowić problemu, choć nie jest to najlepsza praktyka.
Managarm

1
pracował bez problemu. Do api>=16użytku finishAffinity()innego użyj tej metody.
Pan Nikt

4

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.


3

Aby wyjść z aplikacji, możesz użyć:

getActivity().finish();
Process.killProcess(Process.myPid());
System.exit(1);

Aby również zatrzymać usługi, wywołaj następującą metodę:

private void stopServices() {        
    final ActivityManager activityManager = SystemServices.getActivityManager(context);
    final List<ActivityManager.RunningServiceInfo> runningServices = activityManager.getRunningServices(Integer.MAX_VALUE);
    final int pid = Process.myPid();
    for (ActivityManager.RunningServiceInfo serviceInfo : runningServices) {
        if (serviceInfo.pid == pid && !SenderService.class.getName().equals(serviceInfo.service.getClassName())) {
            try {
                final Intent intent = new Intent();
                intent.setComponent(serviceInfo.service);
                context.stopService(intent);
            } catch (SecurityException e) { 
                 // handle exception
            }
        }
    }
}

2

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 jego onReceive() 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 swoich onDestroy()metodach.


1

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.


4
wylogowanie się z aplikacji wymaga jej prawdziwego zabicia. dlatego powinien istnieć sposób na zabicie aplikacji po wylogowaniu
anonim

1

Prawidłowe i dokładne rozwiązanie, aby zamknąć aplikację po kliknięciu przycisku, wykorzystuje poniższy kod:

// Zdarzenie naciśnięcia przycisku Wstecz

public void onBackPressed()
{ 
   moveTaskToBack(true);
   finish();
}

To dość aktualny komponent Androida (np. Aktywność), a nie cała aplikacja .
Laogeodritt

Spowoduje to wysłanie aplikacji tylko w tle
Kumar Gaurav

1

Jeśli używasz Kotlina, właściwym sposobem na wyjście z aplikacji i alternatywą System.exit()jest wbudowana metoda

exitProcess(0)

Zobacz dokumentację .

Liczba 0jako parametr oznacza, że ​​wyjście jest zamierzone i nie wystąpił błąd.


0

To wszystko zabije;)

int p = android.os.Process.myPid();
android.os.Process.killProcess(p);

0

Spróbuj tego

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

0

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:

public static void quitApplication (Activity currentActivity) {
    Intent intent = new Intent (currentActivity, QuitApplicationActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    currentActivity.startActivity (intent);
    currentActivity.finish ();
}

QuitApplicationActivitysamopoczucie:

public class QuitApplicationActivity extends AppCompatActivity {

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        finish ();
    }
}

0

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:truedo moich działań, więc aplikacja po powrocie zaczyna się od MainActivity.

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

0

Aby dodać jedną do listy brutalnych metod zamykania aplikacji:

Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Process.killProcess(Process.myPid())robi to samo, ale jest krótszy
ivan8m8

-1

możesz zakończyć swoje pełne aplikacje. a zatem

Intent intent = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage(getBaseContext().getPackageName());
intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

będzie działać w 100%. Powodzenia!


1
To nie wydaje się odpowiedź na to pytanie!
Al-Mothafar,

-4

Po prostu użyj Finish () na tylnym klawiszu naciśnij onKeypressed ()


4
Zakończ () zamknie działanie, ale na pewno nie zamknie całej aplikacji z pewnością.
2Dee
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.