2010-03-01 11 views

Antwort

36

Unmittelbar nachdem Sie eine neue Aktivität mit startActivity gestartet haben, stellen Sie sicher, dass Sie finish() aufrufen, damit die aktuelle Aktivität nicht hinter der neuen Aktivität gestapelt wird.

EDIT In Bezug auf Ihren Kommentar:

Was Sie vorschlagen in der Regel nicht besonders ist, wie der Android-App Fluss funktioniert und wie die Benutzer erwarten, dass es zu arbeiten. Was Sie können tun, wenn Sie wirklich wollen, ist, um sicherzustellen, dass jeder startActivity zu dieser Tätigkeit führt, ist ein startActivityForResult und hat einen onActivityResult Zuhörer, die für einen Exit-Code überprüft, und Blasen zurück, die. Sie können read more about that here. Grundsätzlich verwenden setResult bevor eine Aktivität Finishing, einen Exit-Code Ihrer Wahl zu setzen, und wenn Ihre Eltern Aktivität, die Exit-Code empfängt, setzen Sie es in dass Aktivität, und dass man beenden, etc ...

+1

Ich glaube, Sie, den Fall nicht verstanden haben, ist meine Frage, wenn Anwender auf spezifische Aktivität, die i-Taste wählen Sie drücken wieder über sie sollte Anruf verlassen App –

+0

in Ordnung, sehen meine bearbeiten machen. –

2

Warum sollte der Benutzer nicht einfach die Home-Taste drücken? Dann können sie Ihre App von jeder Ihrer Aktivitäten verlassen, nicht nur von einer bestimmten.

Wenn Sie sich Sorgen machen über Ihre Anwendung weiterhin etwas im Hintergrund tun. Stellen Sie sicher, dass Sie sie in den relevanten onPause- und onStop-Befehlen stoppen (die ausgelöst werden, wenn der Benutzer Home drückt).

Wenn Sie möchten, dass der Benutzer das nächste Mal auf Ihre App klickt, um am Anfang neu zu starten, empfehle ich, eine Art Menüelement oder UI - Schaltfläche auf dem Bildschirm einzufügen, die den Benutzer zurück zum Starten der Aktivität Ihrer App Wie der Twitter-Vogel in dem offiziellen Twitter-App etc.

78

In meinem Hause Aktivität mir die „onBackPressed“ außer Kraft setzen zu:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

so, wenn der Benutzer in der Heimat-Aktivität ist, und drücken Sie zurück, geht er auf den Startbildschirm.

nahm ich den Code aus Going to home screen Programmatically

+0

Ausgezeichnet, genau was ich brauchte. –

+0

Kann jemand ausführlicher beschreiben, wie das funktioniert? Wenn der Benutzer den Zurück-Knopf drückt und dann die App neu startet, wird der Aktivitäten-Stack nicht unbegrenzt wachsen? – pete

+0

Ausgezeichnet, es funktionierte "wie angekündigt" :) – s0nica

23

eine bessere Benutzererfahrung:

/** 
* Back button listener. 
* Will close the application if the back button pressed twice. 
*/ 
@Override 
public void onBackPressed() 
{ 
    if(backButtonCount >= 1) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
    else 
    { 
     Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
     backButtonCount++; 
    } 
} 
+1

Gute Arbeit. Ein paar andere Dinge, die ich hinzufügen würde, ist das Setzen einer Member-Variable für den Toast.makeText-Aufruf (z. B. Toast myToast = Toast.makeText()), dann die Verwendung von backButtonCount> = 1, Aufruf von .cancel() auf diesem Toast. Ich habe die Dauer auf Toast.LENGTH_LONG für meine Zwecke verlängert, weil die Dauer für die Textmenge kurz erschien. Meine Benutzer sind alte Leute. Außerdem ist backButtonCount, wie es wahrscheinlich ist, eine Membervariable, die auf 0 gesetzt ist und in Ihrer ersten if-Anweisung ebenfalls auf 0 gesetzt sein sollte. –

+0

Ich füge auch "android.os.Process.killProcess (android.os.Process.myPid());" Daher wird meine Anwendung beendet und neu gestartet, wenn der Benutzer erneut darauf klickt –

0

Kasse current_activity Methode finish() onBack method of your current_activity

und anschließend unter Linien in onDestroy der current_activity hinzufügen für das Entfernen Kraft schließen

@Override 
public void onDestroy() 
{ 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    super.onDestroy(); 
} 
1

Die App wird nur beendet, wenn sich im Backstack keine Aktivitäten befinden. hinzufügen SO diese Zeile in Ihrem Manifest android: Nohistory = "true" zu allen Aktivitäten, die Sie nicht wollen, zurück stacked.And dann werden die App rufen Sie die finish() im OnBackPressed

<activity android:name=".activities.DemoActivity" 
      android:screenOrientation="portrait" 
      **android:noHistory="true"** 
      /> 
schließen
1

Zunächst empfiehlt Android nicht, dies innerhalb der Zurück-Schaltfläche zu tun, sondern mit den bereitgestellten Lebenszyklusmethoden. Der Zurück-Button sollte die Aktivität nicht zerstören.

Aktivitäten werden dem Stapel hinzugefügt, auf den über die Übersicht (quadratische Schaltfläche seit Einführung des Materialentwurfs in 5.0) zugegriffen werden kann, wenn die Zurück-Taste für die letzte verbleibende Aktivität aus dem UI-Stapel gedrückt wird. Wenn der Benutzer die App schließen möchte, sollte er sie über das Menü Übersicht ausschließen (schließen).

Ihre App ist dafür verantwortlich, alle Hintergrundaufgaben und Jobs, die nicht ausgeführt werden sollen, mit den Methoden onPause(), onStop() und onDestroy() lifecycle zu stoppen. Bitte lesen Sie mehr über die Lebenszyklen und deren ordnungsgemäße Umsetzung hier: http://developer.android.com/training/basics/activity-lifecycle/stopping.html

Aber um Ihre Frage zu beantworten, Sie Hacks tun können das genaue Verhalten zu implementieren, die Sie wollen, aber wie gesagt, ist es nicht empfohlen:

@Override 
public void onBackPressed() { 

// make sure you have this outcommented 
// super.onBackPressed(); 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
} 
1

Zum Beenden einer Android-App einfach verwenden. in Ihrer Hauptaktivität oder können Sie Android-Manifest-Datei

android:noHistory="true" 
2

Verwenden onBackPressed Methode zu setzen verwenden

@Override 
public void onBackPressed() { 
    finish(); 
    super.onBackPressed(); 
} 

Ihr Problem lösen wird.

0

Ich habe die Antwort von @Vlad_Spays so geändert, dass die Schaltfläche "Zurück" normal funktioniert, es sei denn, es ist das letzte Element im Stapel. Dann wird der Benutzer aufgefordert, die App zu beenden.

@Override 
public void onBackPressed(){ 
    if (isTaskRoot()){ 
     if (backButtonCount >= 1){ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     }else{ 
      Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
      backButtonCount++; 
     } 
    }else{ 
     super.onBackPressed(); 
    } 
} 
Verwandte Themen