为什么(以及如何!?)Android会更改我的引用?

时间:2016-12-31 17:47:51

标签: java android jvm dalvik

我在Java方面有相当多的经验,直到我在我的第一个Android应用程序中注意到这种奇怪的行为,我认为我创建的任何引用都将始终指向相同的Object,除非某些访问引用的代码更改它。

我在ViewPager内有一个活动,下面有两个片段。在活动中,我维护对两个片段(私有字段)的引用以与它们进行交互。在方向改变时,我的片段被停止(并且显然也被破坏),所以我从活动中再次创建它们,因为它们具有复杂的状态,我不想打扰“分块”或“序列化”成束...这可能不是最好的练习,但帽子不是我的问题。它更多的是关于 Android JVM和库如何设置自动更改活动的private对片段的引用(我在onCreate方法中设置)以指向使用自动构建的片段默认构造函数。我知道android可以破坏片段并在以后构造新片段并调用onSavedInstanceState或其他任何东西以允许开发者恢复片段的状态;但是它如何找到并更改活动中的现有引用以指向新构造的片段。

这似乎是一个JVM级别的功能(不仅仅是简单的反射),它允许Android找出片段的所有现有引用(或者是它?我缺少什么?)以便在a时修改它们片段被重新创建。无论如何,这是特定于Android和特定于JVM的功能吗?其他Java实现中是否存在类似的事情,例如Oracle Java或OpenJDK?

请保留关于奇怪的自动参考杂耍部分的答案,而不是关于我如何管理活动/片段生命周期(我知道我可以做得更好,我很乐意阅读你的建议,但请将其保留在评论或答案的第二部分中)。我做了很多调试,这就是我观察到的:片段引用确实在改变,我设法通过手动重置对onCreate方法中明确设置的引用的引用来修复它 - 看似多余操作

0 个答案:

没有答案