Pourquoi onResume est appelé quand je l'ouvre pour la première fois l'onglet d'un tabhost?

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

Question

J'ai un tabhost avec quelques onglets, et chaque onglet ont mis en œuvre la méthode onResume, parce que je dois recharger toutes les données à partir d'une base de données distante à chaque fois que l'utilisateur d'entrer à nouveau dans un tabhost, non seulement la première fois qu'il l'ouvre .

ok, cela fonctionne bien, mais le problème est que lorsque l'utilisateur ouvre pour la première fois un onglet, les deux méthodes, onCreate et onResume sont appelés, puis, mon application deux fois de connexion dans la base de données pour récupérer les informations. ... Je veux seulement être appelé onCreate quand entrer l'utilisateur pour la première fois dans le tabhost

Comment éviter ce problème rare?

Était-ce utile?

La solution

Comme indiqué sur le cycle de vie docs activité , et onCreate onResume sera toujours à la fois être appelé la première fois une activité est lancée. Lorsque vous revenez à l'activité, au moins onResume seront appelés, mais onCreate peut être appelé à nouveau si Android nécessaire pour libérer des ressources.

Si vous avez besoin de la configuration de se produire chaque fois que vous revenez à l'activité, pourquoi mettre non seulement la logique onResume?

Autres conseils

Depuis le contenu de vos onglets sont des activités, ils doivent tous deux être créé (et reprise) lorsque vous démarrez l'application.

Une façon d'éviter cela est d'utiliser des vues plutôt que des activités que le contenu de l'onglet. De cette façon, vous ne disposez que 1 méthode onCreate() parce que vous avez seulement 1 activité (le TabActivity).

Je suis d'accord avec les autres affiches que vous devez re-facteur votre application. vous ne pouvez pas vous attendre à en tenir une activité autonome dans un onglet et ont tout sens.

Cela étant dit, vous pourriez avoir un endroit de drapeau qui indique si la DB a besoin d'initialisation. dans onResume () de chaque activité, vous avez quelque chose comme,

synchronized (MyLock.class) {
    if (!initialized) {
      initDb();
      MyLock.initialized = true;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top