Frage

Ich habe 3 verschiedene Aktivitäten, die Benutzer zwischen in keiner bestimmten Reihenfolge navigiert. Mein Ziel es zweierlei:

  1. Wenn der Benutzer schaltet auf etwas anderes als App wieder aufgenommen wird, ich beginnen soll, wo Benutzer selbst verlassen, wenn app beendet
  2. Wenn letzte Aktivität wieder aufgenommen wird, ich es zum zuletzt gesehenen Zustand wiederhergestellt werden soll (dieses Ich glaube, ich habe eine ziemlich gute Idee, wie man achive)

Ich denke, das Problem ist nicht Start / Stopp - wo ich ziemlich viel bekommen, was ich brauche, aber onCreate() wenn App wurde abgebrochen. In diesem Fall - es nimmt Aktivität, die ich im Manifest konfiguriert. Ich glaube, ich etwas in onCreate() Methode dieses Standard Aktivität setzen kann, aber gibt es eine bessere Art und Weise, dass ich vielleicht fehlt?

War es hilfreich?

Lösung

Wenn Ihre App wurde nicht „beendet“, dann sollte # 1 bereits arbeiten und # 2 nur erfordert keine Werte zu speichern, die nicht automatisch in das Bundle in verwaltet wird onSaveInstanceState () dann die Wiederherstellung sie in onRestoreInstanceState () .

Dies ist eine Art eines Hack, aber ich denke, die beste Wahl für # 1 im Fall der Anwendung der neueste Aktivität im onResume jedem Ihrer Aktivitätsklassen zu speichern wäre tatsächlich beendet wird, dann, wenn Sie zum ersten Mal ausgeführt die onCreate Ihrer ersten Aktivität tun dann eine Überprüfung der korrekten Aktion starten ... vielleicht sogar in einem leeren Aktivität an den Anfang. So etwas wie folgt aus:

StartActivity:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

Dann in allen anderen Aktivitäten (MyActivity1,2,3) speichern die Werte in etwa so:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

Sie müssen auch behandeln Speichern / Wiederherstellen der Daten für jede Aktivität manuell. Sie könnten alle Werte speichern Sie in den Einstellungen innerhalb des onPause müssen () von jedem der Aktivitäten wiederherstellen dann im onResume ().

Andere Tipps

Beachten Sie, dass onSaveInstanceState () für nicht praktikabel ist später langfristiger Zustand, das heißt der Benutzer schaltet das Telefon nach unten und dann wieder ein, an einem unbestimmten Punkt. Sie müssen Ihren eigenen langfristigen Zustand Mechanismus schaffen, wenn Sie für Ihren Zustand wünschen Leistungszyklen zu überleben.

Ich glaube, Sie onSaveInstanceState implementieren möchten, und das wird Ihre Aktivitäten aktuellen Zustand in einem Bündel speichern. Das Bundle wird in Ihre Aktivität in onCreate weitergegeben werden, und Sie können es verwenden, um Ihre Werte zurückgesetzt werden.

http://developer.android.com/guide/topics/fundamentals .html # actstate

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top