gpt4 book ai didi

android - 为什么 Android 中的第一个选项卡 Activity 会永远存在?

转载 作者:太空狗 更新时间:2023-10-29 14:31:27 25 4
gpt4 key购买 nike

我创建了一个简单的 TabActivity,它在运行时读取一些 JSON 数据来构建选项卡。目前,我正在为每个选项卡初始化一个带有虚拟随机项目的空 ListActivity,只是为了查看从选项卡到选项卡的更改是否有效并且内容不会消失。选项卡的实际内容存储在单例类中,因此当由于屏幕方向更改而重新创建选项卡 Activity 时,它们只是根据 Intent 的附加包中包含的标识符从相应列表中提取正确的虚拟项目.

一切正常。我已经在列表 Activity onCreate 方法上记录了一个日志,以观察 Activity 在屏幕旋转时被重新创建,他们确实这样做了。然而,有些奇怪的是第一个选项卡的 Activity 总是重新创建,即使它不可见。当我切换到第三个或第四个选项卡并旋转设备时,除了第一个选项卡之外,之前的选项卡被杀死并且不再重新创建。第一个选项卡始终存在。为什么?我会理解代码中的错误,但是选项卡 Activity 是从教程中复制的,并且列表 Activity 对于所有选项卡都是相同的。这是我得到的一些日志:

List created with 1
onConfigurationChanged
List created with 1
List created with 2
List created with 4
List created with 5
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
List created with 4
onConfigurationChanged
List created with 1
List created with 4
onConfigurationChanged
List created with 1
List created with 4
List created with 5
onConfigurationChanged
List created with 1
List created with 5
onConfigurationChanged
List created with 1
List created with 5

正如您从日志中看到的那样,每个列表 Activity 都会记录放在 extras 包中的标识符,并且几乎不做任何其他事情。所以应用程序启动并创建了第一个选项卡,然后我旋转并切换到其他选项卡。他们的 onCreate 方法被调用。然后日志显示我如何切换选项卡和旋转。根据可见的选项卡重新创建不同的 Activity ,但第一个始终存在!

为什么总是重新创建第一个选项卡?出于某种原因需要这种特殊行为吗?我在 HTC Legend API 级别 7 上看到了这一点。

更新:我在 TabActivity 的循环中放置了更多日志来创建各个选项卡,看起来当添加第一个选项卡时,它的 Activity 总是创建.有什么办法可以避免这种情况吗?也许创建虚拟的空选项卡,然后用真实的 Activity 填充它们?更多日志:

onConfigurationChanged
Tab: Saving tab index 3
...
Tab: Adding tab 1
List created with 1
Tab: Adding tab 2
Tab: Adding tab 3
Tab: Adding tab 4
Tab: Adding tab 5
Tab: Setting tab to index 3
List created with 5

最佳答案

在 Activity 的生命周期方法中放置更多日志后,我发现 onCreate() 和 onStart() 方法总是为第一个选项卡创建,但 onResume() 方法只为可见选项卡调用。所以我将我的惰性初始化代码放在 onResume() 方法上,以避免第一个 Activity 使应用程序陷入困境。

可能 TabActivity 在内部以类似于 http://developer.android.com/reference/android/widget/ViewFlipper.html 的方式工作这就是为什么第一个选项卡 Activity 总是被创建,尽管它不可​​见。

关于android - 为什么 Android 中的第一个选项卡 Activity 会永远存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com