So beenden Sie die Android-Anwendung programmgesteuert

321

Ich habe einige Codes gefunden, um eine Android-Anwendung programmgesteuert zu beenden. Wenn Sie einen der folgenden Codes in onDestroy () aufrufen, wird die Anwendung dann vollständig beendet?

  1. System.runFinalizersOnExit(true)
    (ODER)
  2. android.os.Process.killProcess(android.os.Process.myPid());

Ich möchte meine Anwendung nicht im Hintergrund ausführen, nachdem ich auf die Schaltfläche "Beenden" geklickt habe. Bitte schlagen Sie mir vor, kann ich einen dieser Codes verwenden, um meine App zu beenden? Wenn ja, welchen Code kann ich verwenden? Ist es eine gute Möglichkeit, die App in Android zu beenden?

Vignesh
quelle
Es gibt schon so viele Beiträge hier. stackoverflow.com/search?q=how+to+exit+an+android+app
Mudassir
2
mögliches Duplikat von Beenden einer Anwendung - ist das verpönt?
CommonsWare
benutze 'System.exit (0);' wenn Sie die App wirklich beenden möchten. Ich habe dies bei einem nicht behebbaren Fehler getan, nachdem dem Benutzer eine Nachricht angezeigt wurde. Bei Bedarf können Sie die App sogar automatisch mit AlarmManager neu starten. Siehe: blog.janjonas.net/2010-12-20/…
Jemand irgendwo

Antworten:

396

Seit API 16 können Sie die Methode finishAffinity verwenden, die dem Schließen aller zugehörigen Aktivitäten durch ihren Namen und die Javadoc-Beschreibung ziemlich nahe zu kommen scheint:

this.finishAffinity ();

Beenden Sie diese Aktivität sowie alle Aktivitäten direkt darunter in der aktuellen Aufgabe, die dieselbe Affinität haben. Dies wird normalerweise verwendet, wenn eine Anwendung für eine andere Aufgabe gestartet werden kann (z. B. von einer ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um von der aktuellen Aufgabe zu einer eigenen Aufgabe zu wechseln. Wenn der Benutzer in diesem Fall zu anderen Aktivitäten der zweiten Anwendung navigiert ist, sollten alle diese Aktivitäten im Rahmen des Aufgabenwechsels aus der ursprünglichen Aufgabe entfernt werden.

Beachten Sie, dass Sie mit diesem Finish keine Ergebnisse für die vorherige Aktivität liefern können. Wenn Sie dies versuchen, wird eine Ausnahme ausgelöst.


Seit API 21 können Sie einen sehr ähnlichen Befehl verwenden

finishAndRemoveTask ();

Beendet alle Aktivitäten in dieser Aufgabe und entfernt sie aus der Liste der letzten Aufgaben.

sivi
quelle
28
Das ist definitiv die richtige Antwort! Es ist keine gute Lösung, eine App mit zu beenden System.exit(0);. Vielen Dank für Ihre Antwort! Endlich habe ich eine anständige Lösung gefunden.
Antonio
4
Wissen Sie, ob es eine andere Lösung für API 14 gibt? Danke
Script Kitty
2
Sie können jede Aktivität einzeln beenden (), entweder wenn Sie die App schließen oder innerhalb des Aktivitätslebenszyklus.
Sivi
3
WARNUNG! this.finishAffinity () schließt die App und entfernt sie aus dem Speicher, sodass Sie keine Push-Nachrichten erhalten.
Tincho825
7
Diese Lösung funktioniert in 99% der Fälle. Der Prozess wird jedoch nicht zerstört, sodass beispielsweise Dolch nicht gelöscht wird. In den seltenen Fällen, in denen das Beenden des Prozesses erforderlich ist, System.exit(0)ist dies die einzige Lösung, die für mich funktioniert hat.
Slawischer
154
getActivity().finish();
System.exit(0);

Dies ist der beste Weg, um Ihre App zu beenden. !!!

Die beste Lösung für mich.

Devon
quelle
Ja, funktioniert super! Sie müssen dies von MainActivity aus aufrufen, damit es funktioniert!
mz87
Perfekte Lösung. Der Prozess muss nicht abgebrochen werden, da Android die Speicherverwaltung am besten kennt. Dies bietet jedoch eine Lösung zum Beenden der Aktivität sowie zum Beenden der App, um den Benutzern die Arbeit zu erleichtern.
IAmTheSquidward
Wirklich perfekte Lösung. Viele Probleme wurden behoben. Vielen Dank.
Superuserdo
26
Ich denke nicht, dass dies eine gute Lösung ist. Sie sollten Ihr Programm nicht mit beenden System.exit(0);. Die richtige Lösung wurde von @sivi gepostet (seine Antwort ist oben)
Antonio
13
Dies ist nicht die Lösung, es funktioniert nicht, wenn Sie einen Stapel von Aktivitäten haben
user3290180
45

finishAffinity();

System.exit(0);

Wenn Sie nur verwenden, finishAffinity();ohne dass System.exit(0);Ihre Anwendung beendet wird, der zugewiesene Speicher jedoch weiterhin von Ihrem Telefon verwendet wird, verwenden Sie beide. Wenn Sie eine App sauber und wirklich beenden möchten, verwenden Sie beide.

Dies ist die einfachste Methode und funktioniert überall. Beenden Sie die App wirklich. Sie können eine Menge Aktivitäten öffnen, die alle problemlos beenden.

Beispiel auf einen Button klicken

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

oder wenn Sie etwas Nettes wollen, zum Beispiel mit einem Warndialog mit 3 Tasten JA NEIN und ABBRECHEN

// 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();
Cristian Babarusi
quelle
3
Das ist die richtige Antwort, nach der ich gesucht habe. danke
Treibholz
Wenn ich FCM oder Hintergrundaufgaben in meiner App verwenden würde, hätte ich kein Problem?
Rogayeh Hosseini
Dies war, was ich brauchte, um die Anwendung aus dem Speicher zu
löschen
Bitte nicht verwenden System.exit(0);Sie sollten diesen Speicher nicht freigeben, das System erledigt dies bei Bedarf für Sie. Dies ist das beabsichtigte Verhalten.
Crgarridos
30

Denken Sie bitte genau darüber nach, ob Sie die Anwendung beenden müssen: Lassen Sie das Betriebssystem herausfinden, wo und wann die Ressourcen freigegeben werden sollen.

Andernfalls, wenn Sie absolut sicher sind, verwenden Sie

finish();

Als Reaktion auf den Kommentar von @dave appleton: Lesen Sie als erstes die große Frage / Antwort-Kombination @gabriel: Wird das Beenden einer Anwendung verpönt?

Unter der Annahme, dass wir das haben, hat die Frage hier immer noch eine Antwort: Der Code, den Sie benötigen, wenn Sie etwas mit dem Beenden tun, ist finish(). Natürlich können Sie mehr als eine Aktivität usw. usw. haben, aber das ist nicht der Punkt. Lassen Sie uns einige Anwendungsfälle ausführen

  1. Sie möchten, dass der Benutzer alles aufgrund der Speichernutzung beendet und "nicht im Hintergrund ausgeführt wird? Zweifelhaft. Lassen Sie den Benutzer bestimmte Aktivitäten im Hintergrund stoppen, aber das Betriebssystem alle nicht benötigten Ressourcen beenden.
  2. Sie möchten, dass ein Benutzer nicht zur vorherigen Aktivität Ihrer App wechselt? Konfigurieren Sie es entweder so, dass dies nicht der Fall ist, oder Sie benötigen eine zusätzliche Option. Wenn die back = vorherige Aktivität die meiste Zeit funktioniert, würde der Benutzer dann nicht einfach nach Hause drücken, wenn er etwas anderes tun möchte?
  3. Wenn Sie eine Art Reset benötigen, können Sie herausfinden, ob / wie / usw. Ihre Anwendung beendet wurde. Wenn Ihre Aktivität wieder in den Fokus gerückt wird, können Sie Maßnahmen ergreifen und einen neuen Bildschirm anzeigen, anstatt neu zu starten, wo Sie sich befanden.

Am Ende tötet finish()natürlich nicht alles, aber es ist immer noch das Werkzeug, das Sie brauchen, denke ich. Wenn es einen Anwendungsfall für "Alle Aktivitäten töten" gibt, habe ich ihn noch nicht gefunden.

Nanne
quelle
30
Durch einen Anruf finish()wird die Anwendung nicht beendet. finish()wird ständig verwendet: Call this when your activity is done and should be closed.Es ist der gleiche Effekt wie das Drücken der "Zurück" -Taste.
Tanner Perrien
Fertig stellen beendet die Aktivität. Wie ist das anders als das Töten der Applikation?
Nanne
Es ist nichts Falsches daran, das Activity(nicht das Application) zu "beenden" oder "zu töten" . Beispielsweise können Sie eine neue Aktivität starten, um dem Benutzer einige Informationen anzuzeigen. Nach einer Zeitüberschreitung oder durch Drücken von 'OK' können Sie anrufen finish(), um zur anrufenden Aktivität zurückzukehren.
Tanner Perrien
42
Die meisten Android-Anwendungen haben mehr als eine Aktivität.
CommonsWare
4
@Nanne - Ein Sperrbildschirm ist ein Beispiel dafür, wann Sie alle Aktivitäten stoppen möchten. Angenommen, Sie melden sich bei einer Banking-App an. Nach einer bestimmten Zeit ohne Interaktion des Benutzers wird der Sperrbildschirm gestartet. Sie möchten alle Aktivitäten beenden, wenn jemand die Zurück-Taste auf dem Sperrbildschirm drückt!
Jabari
19

Ich denke, dass die Anwendung in einigen Fällen töten sollte. Zum Beispiel gibt es eine App, die erst nach dem Login verwendet werden kann. Die Anmeldeaktivität verfügt über zwei Schaltflächen: "Anmelden" und "Abbrechen". Wenn Sie auf die Schaltfläche "Abbrechen" klicken, bedeutet dies definitiv "App beenden". Niemand möchte, dass die App im Hintergrund lebt. Daher stimme ich zu, dass in einigen Fällen die App heruntergefahren werden muss.

Sunghun
quelle
2
Ich stimme diesem Anwendungsfall voll und ganz zu. Denken Sie auch an meine sichere App, die an einem bestimmten Ort verfügbar sein muss und am besten geschlossen werden sollte, wenn sich der Benutzer nicht an diesem Ort befindet. Was mache ich?
Sydwell
18

Erstellen Sie ein ExitActivityund deklarieren Sie es im Manifest. Und fordern Sie ExitActivity.exit(context)zum Beenden der App auf.

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

}
vivek
quelle
Dies ist die am häufigsten gewählte Antwort, es ist jedoch ein Hack. Das Aufrufen von finish in onCreate sieht auf den meisten, wenn nicht allen Geräten fehlerhaft aus.
DoruChidean
Hmm, es ist ein Hack, aber keine Panne. Zuerst beenden Sie (), das Sie aufrufen, es kommt zu allen Aktivitäten mit klarer Spitze und Aufgaben und beendet sich dann von selbst. hier verlassen Sie.
Vivek
1
Denken Sie daran, diese Klasse in Ihrem Manifest zu deklarieren. +1 für den cleveren Hack.
Taslim Oseni
Das hat funktioniert! gewählt
TuanDPH vor
17

In Android wird keine Anwendung beendet . SampleActivity.this.finish (); beendet die aktuelle Aktivität.

Wenn Sie von einer Aktivität zu einer anderen wechseln, beenden Sie die vorherige

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

Zuallererst erfordert dieser Ansatz mindestens Api 16.

Ich werde diese Lösung in drei Teile teilen, um dieses Problem weiter zu lösen.

1. Wenn Sie die Anwendung in einer Aktivität beenden möchten, verwenden Sie diesen Codeausschnitt:

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

2. Wenn Sie die Anwendung in einer Nicht-Aktivitätsklasse beenden möchten, die Zugriff auf Aktivität hat, verwenden Sie diesen Codeausschnitt:

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

3. Wenn Sie die Anwendung in einer Nicht-Aktivitätsklasse beenden möchten und nicht auf Aktivitäten wie Service zugreifen können, empfehle ich Ihnen, BroadcastReceiver zu verwenden. Sie können diesen Ansatz allen Ihren Aktivitäten in Ihrem Projekt hinzufügen.

Erstellen Sie die Instanzvariablen LocalBroadcastManager und BroadcastReceiver. Sie können getPackageName () + ". Closeapp" ersetzen, wenn Sie möchten.

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

Fügen Sie diese der onCreate () -Methode hinzu.

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

Vergessen Sie auch nicht, den Empfänger bei der onDestroy () - Aktivitätsmethode abzumelden

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

Zum Beenden der Anwendung müssen Sie Broadcasts mit LocalBroadcastManager senden, den ich in meiner PlayService-Klasse verwende, die Service erweitert.

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

Sie können finishAndRemoveTask ()von API 21 verwenden

public void finishAndRemoveTask ()

Beendet alle Aktivitäten in dieser Aufgabe und entfernt sie aus der Liste der letzten Aufgaben.

Vins
quelle
8

Dies hängt davon ab, wie schnell Sie Ihre App schließen möchten.

Ein sicherer Weg, um Ihre App zu schließen, ist finishAffinity ();

Es schließt Ihre App, nachdem alle Prozesse die Verarbeitung abgeschlossen haben. Dies kann einige Zeit dauern. Wenn Sie Ihre App auf diese Weise schließen und nach kurzer Zeit neu starten, wird Ihre neue Anwendung möglicherweise im selben Prozess ausgeführt. Mit allen nicht abgeschlossenen Prozessen und Singleton-Objekten der alten Anwendung.

Wenn Sie sicher sein möchten, dass Ihre App vollständig geschlossen ist, verwenden Sie System.exit (0).

Dadurch wird Ihre App sofort geschlossen. Es ist jedoch möglich, dass Sie Dateien beschädigen, die Ihre App geöffnet hat, oder dass eine Bearbeitung der freigegebenen Einstellungen nicht abgeschlossen wird. Gehen Sie also vorsichtig damit um.

Wenn Sie Watchdog in Kombination mit einer lang laufenden Aufgabe verwenden, können Sie die Einflüsse der verschiedenen Methoden erkennen.

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;
}

Dadurch wird Ihre App nach 2 Sekunden beendet, ohne dass ein ANR-Dialogfeld oder ähnliches angezeigt wird. Wenn Sie System.exit (0) entfernen , diesen Code ausführen und die App nach dem Schließen neu starten, tritt ein seltsames Verhalten auf, da die Endlosschleife noch ausgeführt wird.

user3424426
quelle
8

Sie sollten besser verwenden, finish()wenn Sie in sind Activity, oder getActivity().finish()wenn Sie in der sind Fragment.

Wenn Sie die App vollständig beenden möchten, verwenden Sie:

getActivity().finish();
System.exit(0);
Farruh Habibullaev
quelle
6

Einfache und einfache Möglichkeit, die Anwendung zu beenden

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
Hassnain Jamil
quelle
Bringt dies nur den Startbildschirm oder tötet die App tatsächlich?
Rpattabi
5

Ich denke, was Sie suchen, ist dies

activity.moveTaskToBack(Boolean nonRoot);
Ciprian
quelle
5

Wir wollen Code, der robust und einfach ist. Diese Lösung funktioniert auf alten und neueren Geräten.

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

Ähnlich wie @MobileMateo, aber in Kotlin

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

Ich bin mir nicht sicher, ob dies verpönt ist oder nicht, aber so mache ich es ...

Schritt 1 - Normalerweise habe ich eine Klasse, die Methoden und Variablen enthält, auf die ich global zugreifen möchte. In diesem Beispiel werde ich es die "App" -Klasse nennen. Erstellen Sie für jede Aktivität Ihrer App eine statische Aktivitätsvariable innerhalb der Klasse. Erstellen Sie dann eine statische Methode namens "close", die die finish()Methode für jede dieser Aktivitätsvariablen ausführt, wenn sie NICHT null sind . Wenn Sie eine Haupt- / Elternaktivität haben, schließen Sie diese zuletzt:

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

Schritt 2 - Überschreiben Sie in jeder Ihrer Aktivitäten die Methoden onStart()und onDestroy(). In onStart(), setzen die statische Variable in Ihrer App - Klasse „gleich this“. In onDestroy()setzen Sie es gleich null. Zum Beispiel in der Klasse "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;
}

Schritt 3 - Wenn Sie Ihre App schließen möchten, rufen Sie einfach anApp.close() von überall an. Alle instanziierten Aktivitäten werden geschlossen! Da Sie nur Aktivitäten schließen und die App selbst nicht beenden (wie in Ihren Beispielen), kann Android von dort aus übernehmen und alle erforderlichen Bereinigungen vornehmen.

Auch hier weiß ich nicht, ob dies aus irgendeinem Grund verpönt wäre. Wenn ja, würde ich gerne Kommentare darüber lesen, warum es so ist und wie es verbessert werden kann!

Jabari
quelle
Interessant, ich würde mich auch dafür interessieren, was andere erfahrene Android-Entwickler darüber dachten.
Rudi Kershaw
4
Indem Sie einen Verweis auf Ihre Aktivität behalten, verlieren Sie tatsächlich Speicher! Siehe dies für eine eingehende Diskussion.
Managarm
@Managarm Die Voraussetzung für diesen Beitrag ist, dass die statische Variable auch nach der Zerstörung des Prozesses (in diesem Fall der Aktivität) erhalten bleibt. Wenn eine ordnungsgemäße Hausreinigung durchgeführt wird, ist dies kein Problem. Daher mache ich den Verweis in der onDestroy () -Methode der Aktivität ungültig.
Jabari
@Jabari Ah, ich habe den onDestroy-Teil verpasst. In diesem Fall sollte es kein Problem sein, obwohl es keine bewährte Methode ist.
Managarm
1
funktionierte ohne probleme. Für den api>=16Einsatz finishAffinity()anderes verwenden diese Methode.
Mr. Nobody
4

Ist das Beenden einer Bewerbung verpönt? . Gehen Sie über diesen Link. Es beantwortet Ihre Frage. Das System erledigt das Beenden einer Anwendung.

Angenommen, Sie haben zwei Aktivitäten A und B. Sie navigieren von A nach B. Wenn Sie auf die Schaltfläche Zurück klicken, wird Ihre Aktivität B aus dem Backstack entfernt und zerstört. Vorherige Aktivität in Backstack-Aktivität A steht im Mittelpunkt.

Sie sollten es dem System überlassen, zu entscheiden, wann die Anwendung beendet werden soll.

öffentliche Leere finish()

Rufen Sie dies an, wenn Ihre Aktivität abgeschlossen ist und geschlossen werden sollte.

Angenommen, Sie haben viele Aktivitäten. Sie können die Aktionsleiste verwenden. Klicken Sie auf das Startsymbol, um zur Hauptaktivität Ihrer Anwendung zu navigieren. Klicken Sie in MainActivity auf die Schaltfläche Zurück, um die Anwendung zu beenden.

Raghunandan
quelle
3

Um Ihre Anwendung zu beenden, können Sie Folgendes verwenden:

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

Um auch die Dienste zu stoppen, rufen Sie die folgende Methode auf:

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
            }
        }
    }
}
Amir Rezazadeh
quelle
2

Dies kann sehr spät sein und auch gemäß den Richtlinien sollten Sie den Lebenszyklusprozess nicht selbst erledigen (wie das Betriebssystem dies für Sie erledigt). Ein Vorschlag wäre, dass Sie einen Rundfunkempfänger in all Ihren Aktivitäten mit " finish()" in deren onReceive() & registrieren, und wann immer Sie beenden möchten, können Sie einfach eine Absicht übergeben, die angibt, dass alle Aktivitäten beendet werden müssen ..... Obwohl Sie dies sicherstellen müssen " Heben Sie die Registrierung des Empfängers in Ihren onDestroy()Methoden auf.

Aalok Sharma
quelle
1

Es ist keine gute Entscheidung, da sie gegen die Anwendungsverarbeitungsprinzipien von Android verstößt. Android beendet keinen Prozess, es sei denn, dies ist absolut unvermeidlich. Dies hilft Apps, schneller zu starten, da sie immer im Speicher bleiben. Sie benötigen also einen ganz besonderen Grund, um den Prozess Ihrer Bewerbung abzubrechen.

Egor
quelle
4
Das Abmelden von einer Anwendung erfordert, dass die App wirklich beendet wird. Es sollte also eine Möglichkeit geben, sicherzustellen, dass die App nach dem
Abmelden
1

Die richtige und genaue Lösung, um die App beim Klicken auf die Schaltfläche zu beenden ist der folgende Code:

// On Button Zurück gedrücktes Ereignis

public void onBackPressed()
{ 
   moveTaskToBack(true);
   finish();
}
Pir Fahim Shah
quelle
Dies ist durchaus die aktuelle Android-Komponente (zB Aktivität), nicht die gesamte App .
Laogeodritt
Dies wird nur die App im Hintergrund senden
Kumar Gaurav
1

Wenn Sie Kotlin verwenden, System.exit()ist eine integrierte Methode der richtige Weg, um die App zu beenden

exitProcess(0)

Siehe die Dokumentation .

Die Zahl 0als Parameter bedeutet, dass der Exit beabsichtigt ist und kein Fehler aufgetreten ist.

Micer
quelle
0

Dies wird alles töten;)

int p = android.os.Process.myPid();
android.os.Process.killProcess(p);
D.Snap
quelle
0

Versuche dies

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Ahmer Afzal
quelle
0

Der einfachste Weg, eine Anwendung aus einer Aktivität zu beenden, ohne die Logik von Android zu brechen und ohne mehr Code in vorhandene Aktivitäten einzufügen und Extras zu übergeben, ist der folgende:

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

das QuitApplicationActivityWesen:

public class QuitApplicationActivity extends AppCompatActivity {

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

        finish ();
    }
}

quelle
0

Die Antwort von @Sivi schließt die App. Wenn Sie jedoch bei der Rückkehr einige untergeordnete Aktivitäten haben, wird möglicherweise eine andere unvollendete Aktivität geöffnet. Ich noHistory:truehabe meine Aktivitäten erweitert, damit die App bei der Rückkehr von MainActivity startet.

<activity 
      android:name=".MainActivity"
      android:noHistory="true">
</activity>
Saeed Vrz
quelle
0

Nur um eine zur Liste der brutalen Methoden zum Beenden einer App hinzuzufügen:

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

Daniel F.
quelle
Process.killProcess(Process.myPid())macht das gleiche, ist aber kürzer
ivan8m8
-1

Sie können Ihre vollständigen Apps beenden. somit

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

es wird 100% funktionieren. Viel Glück!

omor
quelle
1
Es scheint keine Antwort auf diese Frage zu sein!
Al-Mothafar
-4

Verwenden Sie einfach finish () für die Zurück-Taste. Drücken Sie onKeypressed ()

Khushal Rasali
quelle
4
finish () schließt eine Aktivität, schließt aber sicherlich nicht die gesamte App mit Sicherheit.
2Dee