Programmatisch Android-Anwendung beenden Ohne finish () - Java, Android

Bevor Sie mir sagen, dass diese Frage bereits gestellt istIch habe dir gesagt, dass keine dieser Fragen eine Antwort hat, die zu mir passt. Ich habe eine Hauptaktivität für meine App. Bevor es läuft, habe ich einen Startbildschirm Aktivität. Wenn ich finish () anrufe, kehrt das Programm zu meinem Begrüßungsbildschirm zurück. Ich will das nicht. Sag mir nicht, dass ich finish () benutzen soll. Ich habe gehört, dass es nicht gut ist, wenn Android die App nicht selbst schließt. Ich weiß, was ich mache ... wahrscheinlich ....

Ich möchte die Anwendung vollständig von der schließen können zweite Aktivität. Kennt jemand eine Art, wie ich das machen kann?

Antworten:

4 für die Antwort № 1

Benutzen finish() in deinem Begrüßungsbildschirm kurz bevor du deine zweite erstellst activity, dann benutze finish() ist der zweite activity: Das wird nicht zurück bringen Begrüßungsbildschirm.


6 für die Antwort № 2

Wenn Sie Ihre Anwendung schließen möchten, können Sie anrufen

   finishAffinity();

oder Wenn du es im Hintergrund schließen willst, solltest du auch schreiben,

android: excludeFromRecents = "wahr"

in AndroidManifest:

   <activity
android:name="com.smart.remote.main.SplashActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

5 für die Antwort № 3

Ausführen finish() Auf der Splash-Aktivität ist eine Lösung, aber zwei alternative Methoden sind:

  1. Starten Sie die Splash-Aktivität mit android:noHistory="true" in seinem Manifest-Eintrag.
  2. Starten Sie die sekundäre Aktivität mit der Absichtsflagge FLAG_ACTIVITY_CLEAR_TOP.

Meine Präferenz wäre die erste, da die Benutzer wahrscheinlich den Splash-Screen im History-Stack nie sehen werden (oder überhaupt, aber das ist eine andere Diskussion).


3 für die Antwort № 4

finishAffinity ();

Dies ist einfach das Verlassen der App


2 für die Antwort № 5

Berufung finish() Jede Aktivität wird ihren Lebenszyklus durchlaufen, um sie zu zerstören. Um das Fragment sicher zu zerstören, wird es aus dem Backstack entfernt.

Damit, du musst anrufen finish(); Methode aus Ihrer Splash-Aktivität zuerst, dann starten Sie die MainActivity Verwendung der Absicht wie folgt

finish();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);

Sie können dieses Problem auch lösen, indem Sie die Methode überschreiben OnBackPressed mit einem leeren ohne zu rufen Super.onBackPressed ();


1 für die Antwort № 6

Auch wenn Sie es nicht wollen, es tut mir leid, Ihnen zu sagen, dass der einzige Weg, sauber zu verlassen, der ist finish(). Wenn Sie Probleme beim Schließen haben Activities im hintergrund gibt es eine andere lösung dafür, check dieser Link.

Grundsätzlich gibt es keine ein Klick oder alles auf einmal Art und Weise, dies zu erreichen, und nicht verwenden System.exit()es ist eine schlechte Übung, wie du vielleicht liest Hier.


1 für die Antwort № 7

Ziel ist der Weg zu gehen.Sie können Ihre SplashScreen-Aktivität schließen, sobald sie nicht mehr benötigt wird. Ie. Nachdem SplashScreen nicht mehr benötigt wird, rufen Sie einfach nach dem Start Ihrer Hauptaktivität den Vorgang auf.

Außerdem wird es nicht das Ende () schließenAnwendung, auch nach dem Aufrufen des Prozesses für Ihre App wird weiterhin bestehen, alle Ihre statischen Variablen werden noch gültig sein, natürlich, bis android beschließt, Ihre App zu töten, die lange nach Ihrem Zielanruf passieren kann.


0 für die Antwort № 8

EDIT: nur um klar zu sein, das ist nicht der richtige Weg, um eine Anwendung zu verlassen. Benutzung auf eigene Gefahr. Das OP fragte nach EIN Ausstieg aus der Anwendung, auch wenn es nicht der Fall war richtig Weg.

System.exit(0)

Ist das wonach Sie suchen?


0 für die Antwort № 9

Ich stimme Ihnen vollkommen zu finish() ist irgendwie nicht praktisch, aber wie auch immer Sie es einfach verwenden können, und alles wird "koscher" mit Best Practices sein, nehme ich an.

Im Folgenden finden Sie ein kurzes Lernprogramm, mit dem Sie "Beenden" von anderen Aktivitäten in Ihrer App ausführen können:

Ich nehme an, dass der Begrüßungsbildschirm die erste Aktivität in Ihrer App ist.

  1. Wenn Sie in Ihrer App auch einen Haupt- / Startbildschirm haben, beenden Sie die Splash-Aktivität, nachdem der Haupt / Home-Dienst mit Intent von Ihrer Splash-Aktivität mit z.

startActivity(new Intent(getApplication(), Home.class)); Splash.this.finish();}

Danach folgen Sie Schritt 2., aber überschreiben Sie das onResume im Begrüßungsbildschirm im Home / Main-Bildschirm.

2. Wenn Ihr Benutzer später Zugriff auf den Startbildschirm benötigt, tun Sie dies nicht finish() Ihren Begrüßungsbildschirm, überschreiben Sie jedoch die onResume-Methode wie folgt:

@Override protected void onResume() { super.onResume(); try { Intent i = getIntent(); Boolean isExit = i.getBooleanExtra("isExitAction",false); if(isExit){ this.finish(); } } catch (Exception e){} }

3. Verwenden Sie in der Aktivität, von der Sie die Anwendung schließen möchten, den folgenden Code, um den Bereich zu verlassen, in dem Sie am besten zu Ihnen kommen. Vergiss nicht zu ersetzen Home.class abhängig davon, welche deine erste unerledigte Aktivität ist.

        Intent i = new Intent(this, Home.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("isExitAction", true);
startActivity(i);

WHAT IT DOES:Wenn du einen Knopf von deiner fünften Aktivität drückst, der den Code im dritten Schritt auslöst, beendet er alle vorherigen Aktivitäten 4,3,2 und leitet dich zu Aktivität 1 weiter, die dein Zuhause (oder Splash) ist. Nach der Umleitung, der onResume() wird aufgerufen und beendet die letzte verbleibende Aktivität. Die Anwendung erreicht this.finish() nur wenn isExitAction ist wahr


Speisekarte