我有一个带有一些选项卡的选项卡,每个选项卡都实现了 onresume 方法,因为每次用户再次进入选项卡主机时,我都需要重新加载远程数据库中的所有数据,而不仅仅是他第一次打开它。
好的,它工作得很好,但问题是当用户第一次打开选项卡时,会调用 onCreate 和 onResume 这两个方法,然后,我的应用程序两次连接到数据库以检索信息....我只想在用户第一次进入 tabhost 时调用 onCreate。
如何避免这个罕见的问题?
我有一个带有一些选项卡的选项卡,每个选项卡都实现了 onresume 方法,因为每次用户再次进入选项卡主机时,我都需要重新加载远程数据库中的所有数据,而不仅仅是他第一次打开它。
好的,它工作得很好,但问题是当用户第一次打开选项卡时,会调用 onCreate 和 onResume 这两个方法,然后,我的应用程序两次连接到数据库以检索信息....我只想在用户第一次进入 tabhost 时调用 onCreate。
如何避免这个罕见的问题?
如Activity 生命周期文档中所述,onCreate 和 onResume 将始终在第一次启动 Activity 时被调用。回到Activity时,至少会调用onResume,但如果Android需要释放资源,可能会再次调用onCreate。
如果您需要在每次返回活动时进行设置,为什么不只将逻辑放在 onResume 中呢?
我同意其他海报的观点,即您应该重新考虑您的应用程序。您不能只期望将独立活动粘贴到选项卡中并让所有内容都有意义。
话虽如此,您可能在某处有一个标志,指示数据库是否需要初始化。在每个活动中onResume()
,您都有类似的东西,
synchronized (MyLock.class) {
if (!initialized) {
initDb();
MyLock.initialized = true;
}
}
由于选项卡的内容是活动,因此必须在启动应用程序时创建(并恢复)它们。
避免这种情况的一种方法是使用视图而不是活动作为选项卡内容。这样,您只有 1 个onCreate()
方法,因为您只有 1 个活动(the TabActivity
)。