Wie überprüfe ich, ob eine Aktivität die letzte im Aktivitätsstapel für eine Anwendung ist?

Ich möchte wissen, ob der Benutzer auf den Startbildschirm zurückkehren würde, wenn er die aktuelle Aktivität beenden würde.

  • Wie kann ich einen Android AVD für eine Samsung Galaxy Note 2 erstellen?
  • So lösen Sie "Ihr APK-Versionscode muss höher sein als 2." in der Google Play Developer Console?
  • Wie man ein JPEG-Bild auf Android mit einem benutzerdefinierten Qualitätsniveau zu speichern
  • Gradle in Android Studio geben Fehler Projekt Sync fehlgeschlagen
  • Android 5.0 JobScheduler API auf früheren Versionen?
  • Android: wie man meine app als "camera app"
  • Es sind nicht behebbare Fehler, die zuerst korrigiert werden müssen
  • Was ist ein Android PendingIntent?
  • Snackbar funktioniert nicht in Fragmentklasse
  • TextWatcher-Ereignisse werden mehrmals gefeuert
  • Wie verwende ich FragmentPagerAdapter, um Tabs mit verschiedenen Inhalten zu haben?
  • Java.lang.NoClassDefFoundError: javax.activation.DataHandler in android
  • 9 Solutions collect form web for “Wie überprüfe ich, ob eine Aktivität die letzte im Aktivitätsstapel für eine Anwendung ist?”

    Es besteht die Möglichkeit, aktuelle Aufgaben und ihren Stack mit ActivityManager zu überprüfen.

    Also, um festzustellen, ob eine Aktivität die letzte ist:

    • Anforderung android.permission.GET_TASKS Berechtigungen im Manifest.
    • Verwenden Sie den folgenden Code:

      ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE ); List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10); if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) { Log.i(TAG, "This is last activity in the stack"); } 

    Bitte beachten Sie, dass der oben genannte Code nur gültig ist, wenn Sie eine einzelne Aufgabe haben. Wenn es möglich ist, dass die Anzahl der Aufgaben für Ihre Anwendung existiert – müssen Sie andere taskList- Elemente überprüfen. Lesen Sie mehr über Aufgaben Aufgaben und Back Stack

    UPDATE (Jul 2015):

    Da getRunningTasks () veraltet ist, von API 21 ist es besser, raukodraug Antwort oder Ed Burnette eins zu folgen (ich würde es vorziehen zweiter).

    Ich werde den Kommentar von @ H9kDroid als die beste Antwort hier für Leute, die eine ähnliche Frage haben, posten .

    Sie können isTaskRoot verwenden, um zu wissen, ob die Aktivität die Wurzel einer Aufgabe ist.

    ich hoffe das hilft

    Hier gibt es eine einfachste Lösung, die du isTaskRoot () in deiner Aktivität verwenden kannst

    Zwar gibt es einen Weg, dies zu erreichen (siehe andere Antworten) würde ich vorschlagen, dass Sie das nicht tun sollten. Normale Android-Anwendungen sollten nicht wissen müssen, ob der Startbildschirm angezeigt wird oder nicht.

    Wenn Sie versuchen, Daten zu speichern, setzen Sie den Datensicherungscode in Ihre onPause () – Methode. Wenn du versuchst, dem Benutzer einen Weg zu geben, deinen Verstand über die bestehende Anwendung zu ändern, kannst du den Schlüssel nach oben / unten für die Back-Taste und die onBackPressed () -Methode abfangen und sie mit einem "Bist du sicher?" prompt.

    Eine Möglichkeit, diesen Überblick zu behalten, besteht darin, eine Markierung einzuschließen, wenn Sie eine neue Aktivität starten und prüfen, ob die Markierung existiert.

    Wenn Sie eine neue Aktivität starten, fügen Sie die Markierung ein:

     newIntent=new Intent(this, NextOne.class); newIntent.putExtra(this.getPackageName()+"myself", 0); startActivity(newIntent); 

    Und dann kannst du es so überprüfen

     boolean islast=!getIntent().hasExtra(this.getPackageName()+"myself") 

    Das Problem mit der Lösung von sandrstar mit ActivityManager ist: Du brauchst eine Erlaubnis, um die Aufgaben auf diese Weise zu bekommen. Ich fand einen besseren Weg:

     getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) 

    Die Activity auf dem Stack-Boden sollte immer diese Kategorie standardmäßig sein, während andere Aktivitäten es nicht bekommen sollten.
    Aber auch wenn dies bei einigen Geräten fehlschlägt, können Sie es beim Starten Ihrer Activity einstellen:

     Intent intent = new Intent(startingActivity, SomeActivityClass.class); intent.addCategory(Intent.CATEGORY_LAUNCHER); activity.startActivity(intent); 

    Ich habe eine Basisklasse für alle meine Aktivitäten erstellt, die AppCompatActivity erweitert und die einen statischen Zähler hat:

     public abstract class BasicActivity extends AppCompatActivity { private static int activityCounter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ++activityCounter; ... } @Override public void onDestroy() { super.onDestroy(); --activityCounter; if(activityCounter==0) { // Last instance code... } } public boolean isLastInstance() { return (activityCounter==1); } } 

    Das hat bis jetzt gut geklappt; Und unabhängig von der API-Version. Es erfordert natürlich, dass alle Aktivitäten diese Basisklasse erweitern – was sie tun, in meinem Fall.

    Bearbeiten: Ich habe eine Instanz bemerkt, wenn der Zähler auf Null geht, bevor die App ganz ausläuft, was ist, wenn die Orientierung geändert wird und nur eine Aktivität geöffnet ist. Wenn sich die Orientierung ändert, wird die Aktivität geschlossen und eine andere wird erstellt, so onDestroyed wird für die letzte Aktivität aufgerufen, und dann wird onCreate aufgerufen, wenn dieselbe Aktivität mit der geänderten Orientierung erstellt wird. Dieses Verhalten muss berücksichtigt werden; OrientierungEventListener könnte eventuell verwendet werden.

    Android implementiert einen Aktivitätsstapel, ich schlage vor, dass Sie hier darüber lesen. Es sieht aus wie alles, was du tun möchtest, aber ruft die rufende Aktivität ab: getCallingActivity() . Wenn die aktuelle Aktivität die erste Aktivität in Ihrer Anwendung ist und die Anwendung vom Startbildschirm gestartet wurde, sollte ich (ich nehme) zurückgeben null .

    Die eine Sache, die hier verpasst hat, ist die "Home Key" -Klick, wenn aktiviert, können Sie dies nicht aus Ihrer Aktivität zu erkennen, so wäre es besser, Aktivität Stack programmgesteuert mit der Handhabung "Zurück-Taste" drücken und verschieben auf die erforderliche Aktivität oder zu kontrollieren Nur notwendige Schritte machen.

    Darüber hinaus können Sie nicht sicher sein, dass das Starten Ihrer Aktivität aus der Liste "Letzte Aktivität" mit der Voreinstellung einiger zusätzlicher Daten in die Absicht zum Öffnen der Aktivität erkannt werden kann, da sie in diesem Fall wiederverwendet wird.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.