2010-12-17 12 views
5

Ich habe einen Tabhost mit einigen Tabs, und auf jedem Tab wurde die Methode onresume implementiert, weil ich jedes Mal, wenn der Benutzer erneut in einen Tabhost eingibt, alle Daten aus einer entfernten Datenbank neu laden muss, nicht nur beim ersten Öffnen.Warum onResume aufgerufen wird, wenn ich zum ersten Mal die Registerkarte eines TabHosts öffne?

ok, es funktioniert gut, aber das Problem ist, dass, wenn der Benutzer zum ersten Mal einen Tab öffnet, die beiden Methoden onCreate und onResume aufgerufen werden, dann verbinden meine App zweimal in die Datenbank, um die Informationen abzurufen .... Ich möchte nur onCreate aufgerufen werden, wenn der Benutzer zum ersten Mal in den Tabhost

eingeben, wie dieses seltene Problem zu vermeiden?

Antwort

14

Wie auf der Activity lifecycle docs angegeben, werden onCreate und onResume immer beide beim ersten Start einer Aktivität aufgerufen. Wenn Sie zu Activity zurückkehren, wird mindestens onResume aufgerufen, aber onCreate wird möglicherweise erneut aufgerufen, wenn Android Ressourcen freigeben muss.

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

+0

lol, gute Idee, wenn onresume immer das erste Mal genannt wird ...... dann muss ich nicht oncreat füllen !!! – NullPointerException

+0

woooooooooo funktioniert es !!! Danke vielmals! – NullPointerException

+0

Übrigens sind Sie 100% sicher, dass onresume immer zum ersten Mal aufgerufen wird, wenn eine Aktivität erstellt wird? – NullPointerException

0

Da der Inhalt Ihrer Tabs Aktivitäten sind, müssen beide beim Start der App erstellt (und fortgeführt) werden.

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

+0

mir unmöglich, ich habe meine app mit Aktivitäten entwickelt, ich den Code nicht wiederholen kann, dann ist es eine Menge Code – NullPointerException

+0

keine andere Lösung gibt es? – NullPointerException

0

Ich stimme den anderen Postern zu, dass Sie Ihre App re-Faktor sollten. Sie können nicht einfach erwarten, eine eigenständige Aktivität in einem Tab zu halten und alles sinnvoll zu machen.

Wenn Sie das sagen, könnten Sie irgendwo ein Flag haben, das anzeigt, ob die Datenbank initialisiert werden muss. in jeder onResume Aktivität(), können Sie so etwas wie haben,

synchronized (MyLock.class) { 
    if (!initialized) { 
     initDb(); 
     MyLock.initialized = true; 
    } 
} 
Verwandte Themen