412 Stimmen

Wie man eine Android-Anwendung programmatisch beendet

Ich habe einige Codes zum programmgesteuerten Beenden einer Android-Anwendung gefunden. Wenn ich einen der folgenden Codes in onDestroy() aufrufe, wird dann die Anwendung vollständig beendet?

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

Ich möchte nicht, dass meine Anwendung im Hintergrund läuft, nachdem ich auf die Schaltfläche "Beenden" geklickt habe. Bitte informieren Sie mich, ob ich einen dieser Codes verwenden kann, um meine Anwendung zu beenden? Wenn ja, welchen Code kann ich verwenden? Ist es ein guter Weg, um die Anwendung in Android zu beenden?

22voto

sunghun Punkte 1404

Ich denke, dass die Anwendung in einigen Fällen getötet werden sollte. Zum Beispiel gibt es eine Anwendung, die nur nach der Anmeldung verwendet werden kann. Die Anmeldeaktivität hat zwei Schaltflächen, "Anmelden" und "Abbrechen". Wenn Sie auf die Schaltfläche "Abbrechen" klicken, bedeutet das definitiv "Beenden der Anwendung". Niemand möchte, dass die Anwendung im Hintergrund weiterläuft. Ich stimme also zu, dass in manchen Fällen die App beendet werden muss.

22voto

san Punkte 490

In Android gibt es kein Beenden von Anwendungen , SampleActivity.this.finish(); wird die aktuelle Aktivität beenden.

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

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

20voto

twenk11k Punkte 517

Zunächst einmal erfordert dieser Ansatz mindestens Api 16.

Ich werde diese Lösung in 3 Teile aufteilen, um dieses Problem umfassender zu lösen.

1. Wenn Sie die Anwendung in einem der folgenden Fälle beenden möchten Tätigkeit verwenden Sie dieses Codeschnipsel:

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 einem der folgenden Fälle beenden möchten nicht Aktivität Klasse, die Zugriff auf Activity hat, dann verwenden Sie diesen Codeschnipsel:

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-Activity-Klasse beenden möchten und nicht auf eine Activity wie z.B. einen Service zugreifen können, empfehle ich Ihnen, BroadcastReceiver zu verwenden. Sie können diesen Ansatz zu 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 zur onCreate()-Methode von Activity hinzu.

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

Vergessen Sie auch nicht, den Empfänger in der onDestroy()-Methode von Activity abzumelden

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

Für quit Anwendung, müssen Sie Broadcast mit LocalBroadcastManager, die ich in meinem PlayService Klasse, die Service erweitert verwenden senden.

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

13voto

Vins Punkte 4009

Sie können verwenden finishAndRemoveTask () von API 21

public void finishAndRemoveTask ()

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

12voto

Sagittarius Punkte 167

Wenn Sie Ihre Anwendung schließen möchten:

Für API >= 21, verwenden Sie:

finishAndRemoveTask();

Für API < 21 verwenden:

finishAffinity();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X