当包含视图的布局所在的活动被重新创建时,视图的“标记(tag)”是否会被恢复?

12

涉及Activity重建状态的文档:

默认情况下,系统使用Bundle实例状态保存与活动布局中的每个视图对象相关的信息(例如输入到EditText对象中的文本值)。因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到先前的状态,无需编写任何代码。

View.setTag(Object)的文档:

设置与此视图关联的标记。标记可用于标记其层次结构中的视图,不必在层次结构中唯一。标记还可以用于在视图中存储数据,而无需使用另一个数据结构。

我的问题是:如果我在Activity的布局中为一个具有唯一id的View设置了tag,并且然后系统销毁并重新创建了该Activity,那么当重新创建该View时,它是否会自动带有我最初设置的Object标记?


尚未尝试,但从技术上讲,这并没有太多意义。Object可以是任何东西,系统恢复对它没有控制的对象的引用将是自杀行为(它无法包含在Bundle中,浅拷贝是否有意义也不清楚等等)。 - class stacker
系统预计在以后的某个日期重新创建该活动,因此我可以看到它保留对原始标记的引用。我将测试其行为并报告结果。如果这已经被记录下来就更好了。 - jph
告诉我一些关于它的信息。 ;) 顺便说一下,visibility属性将 不会 被存储,而其他许多属性则会被存储。-- 如果它是一个 int 或者其他类型的话,我会说没问题,但是 Object 引用在活动重新创建时将会失效。但我很好奇你会发现什么。 - class stacker
了解可见性很重要。我根据用户的操作经常以编程方式修改视图的可见性。我希望这些信息可以作为每个视图实例状态的一部分保存下来。遗憾。 - jph
1个回答

7
如果我在活动布局中设置了一个具有唯一id的视图的标签,然后系统销毁了该活动并随后重新创建,那么当重新创建该视图时,它会自动带有我最初设置的对象标签吗?
根据我阅读源代码的理解,不会。
系统期望在以后的某个时间重新创建活动,因此我可以看到它保留对原始标记的引用。但这并非总是可能的,因为保存的实例状态Bundle需要在进程边界上可传输。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接