Warum ist onResume genannt, wenn ich zum ersten Mal öffnen Sie die Registerkarte eines TabHost?

StackOverflow https://stackoverflow.com/questions/4473532

Frage

ich habe eine TabHost mit einigen Registerkarten und jeder Reiter hat die Methode onResume implementiert, weil ich jedes Mal all Daten von einer entfernten Datenbank neu geladen werden muss der Benutzer eingeben wieder in einem TabHost, nicht nur das erste Mal, wenn er sie öffnet .

ok, es funktioniert gut, aber das Problem ist, dass, wenn der Benutzer zum ersten Mal öffnet eine Registerkarte, die beiden Methoden, onCreate und onResume genannt werden, dann, meine app connect zweimal in die Datenbank die Informationen abzurufen. ... ich mag nur onCreate, wenn der Benutzer eingeben zum ersten Mal in die TabHost

aufgerufen werden

, wie dieses seltene Problem zu vermeiden?

War es hilfreich?

Lösung

Wie bereits erwähnt auf der Activity Lifecycle-docs , onCreate und onResume wird immer sowohl das erste Mal aufgerufen werden, eine Aktivität gestartet wird. Wenn an Aktivität zurückgeht, zumindest wird onResume genannt werden, aber onCreate kann wieder aufgerufen werden, wenn Android benötigten Ressourcen freizugeben.

Wenn Sie das Setup benötigen jedes Mal, wenn die Aktivität zurückkehren auftreten, warum nicht nur die Logik in onResume setzen?

Andere Tipps

Da Ihre Tabs' Gehalte Aktivitäten sind, dann haben sie beide geschaffen werden (und wieder), wenn Sie die App starten.

Eine Möglichkeit, dies zu vermeiden, ist Ansichten anstelle von Aktivitäten wie die Registerkarte Inhalte zu verwenden. Auf diese Weise Sie nur 1 onCreate() Methode haben, weil Sie nur 1-Aktivität haben (die TabActivity).

Ich stimme mit den anderen Plakaten, dass Sie Ihre App erneut Faktor sollte. Sie können nicht nur erwarten, eine Stand-alone-Aktivität in einem Register zu halten und alles einen Sinn haben.

das wird gesagt, könnte man irgendwo einen Flag hat, wenn gibt die DB Initialisierung benötigt. in jeder onResume Aktivität (), haben Sie so etwas wie:

synchronized (MyLock.class) {
    if (!initialized) {
      initDb();
      MyLock.initialized = true;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top