Why onResume is called when i open for the first time the tab of a tabhost?
I have a tabhost with some tabs, and each tab have implemented the method onresume, because I need to reloa开发者_StackOverflow中文版d all the data from a remote database each time the user enter again in a tabhost, not only the first time he opens it.
Ok, it works nice, but the problem is that when the user opens for the first time a tab, the two methods, onCreate and onResume are called, then, my app connect two times into the database to retrieve the info.... I want only to be called onCreate when the user enter for the first time into the tabhost.
How to avoid this rare problem?
As stated on the Activity lifecycle docs, onCreate and onResume will always both be called the first time an Activity is started. When going back to Activity, at least onResume will be called, but onCreate may be called again if Android needed to free up resources.
If you need the setup to occur every time you return to the activity, why not only put the logic in onResume?
Since your tabs' contents are activities, then they both have to be created (and resumed) when you start the app.
One way to avoid this, is to use views instead of activities as the tab content. That way, you only have 1 onCreate()
method because you only have 1 activity (the TabActivity
).
I agree with the other posters that you should re-factor your app. You can't just expect to stick a stand alone activity into a tab and have everything make sense.
That being said, you could have a flag somewhere that indicates if the DB needs initialization. in each activity's onResume()
, you have something like,
synchronized (MyLock.class) {
if (!initialized) {
initDb();
MyLock.initialized = true;
}
}
精彩评论