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?

5voto

Jabari Punkte 5159

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

Schritt 1 - Ich habe normalerweise eine Klasse, die Methoden und Variablen enthält, auf die ich global zugreifen möchte. In diesem Beispiel nenne ich sie die Klasse "App". Erstellen Sie innerhalb der Klasse eine statische Activity-Variable für jede Aktivität, die Ihre App hat. Erstellen Sie dann eine statische Methode namens "close", die die finish() Methode für jede dieser Aktivitätsvariablen 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 - in jeder Ihrer Aktivitäten, überschreiben Sie die onStart() y onDestroy() Methoden. Unter onStart() setzen Sie die statische Variable in Ihrer App-Klasse gleich " this ". Unter onDestroy() setzen Sie ihn 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 Anwendung schließen wollen, rufen Sie einfach App.close() von überall her. Alle instanziierten Aktivitäten werden geschlossen! Da Sie nur Aktivitäten schließen und nicht die App selbst beenden (wie in Ihren Beispielen), kann Android von dort aus übernehmen und alle notwendigen Aufräumarbeiten durchführen.

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

5voto

amrezzd Punkte 1397

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

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

3voto

Aalok Sharma Punkte 1025

Das kann sehr spät sein, und gemäß den Richtlinien dürfen Sie den Lebenszyklusprozess nicht selbst durchführen (das Betriebssystem übernimmt das für Sie). Ein Vorschlag wäre, dass Sie einen Broadcast-Empfänger in allen Ihren Aktivitäten mit " finish() " in ihrem onReceive() & wann immer Sie aufhören möchten, können Sie einfach eine Absichtserklärung abgeben, die besagt, dass alle Aktivitäten eingestellt werden müssen..... Achten Sie jedoch darauf, dass Sie den Empfänger in Ihrem System "abmelden". onDestroy() Methoden.

2voto

Pir Fahim Shah Punkte 9935

Die richtige und exakte Lösung für kündigen die App auf Tastenklick verwendet den folgenden Code:

//On Taste Zurück gedrückt Ereignis

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

2voto

Saeed Vrz Punkte 127

@Sivi 's Antwort schließt die App. Aber bei der Rückkehr, wenn Sie einige untergeordnete Aktivitäten haben, könnte eine andere unvollendete Aktivität geöffnet werden. Ich habe hinzugefügt noHistory:true zu meinen Aktivitäten, damit die App bei der Rückkehr von MainActivity startet.

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

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