【发布时间】:2013-06-03 17:34:51
【问题描述】:
背景:
- 开发使用 Android Google Map v2 的原生 Android 应用程序,使用
android.support.v4.app.FragmentActivity。在 Android v2.2 上运行。
目标:
- 在更改手机方向之前保留地图上“绘制”的标记/多段线。
问题:
-
我能否将标记/折线“保存”为捆绑包的一部分,并通过使用适当的
savedInstance.put..方法将它们保存在onSaveInstanceState中,然后使用适当的方法将它们“恢复”到onCreate中,从而重新显示它们适当的savedInstanceState.get..方法。在查看标记
getID()的描述时,当Marker.getId()method 的 Google 文档指出以下内容时,我感到很困惑:从 Bundle 中恢复地图时,该地图上的标记也会恢复。但是,这些标记随后将由不同的 Marker 对象表示。标记的 id 可用于在此类恢复后检索标记对象的新实例。
Google 文档(上面的粗体文本)听起来好像 Marker 只是自动恢复而无需采取任何操作。那不是我的经验……也许我误解了所陈述的内容。或者,也许您必须在 Bundle 中明确保存地图?有人能澄清一下这是什么意思吗?
-
假设我必须通过适当的
savedInstance.put...方法将标记和折线显式保存到包中,我应该保存整个标记还是应该保存标记 ID 并使用标记 ID 检索标记信息以重新显示标记?我找不到可以让我保存整个标记的put方法。我注意到 Google Maps Android API v2 的
MapFragmentsection 声明如下:从 GoogleMap 获得的任何对象都与视图相关联。重要的是不要抓住超出视图生命周期的对象(例如标记)。否则会导致视图无法释放,导致内存泄漏。
这句话让我相信我不应该尝试保存标记本身,而是尝试保存标记 ID,然后根据与标记 ID 关联的标记对象重新生成标记。对于折线也是如此。我的假设正确吗?
另外,我应该避免将标记作为类变量吗?我担心的是,如果 Marker 是一个类变量并且 Activity Map 片段放置在后堆栈上,这可能会导致内存泄漏,因为它会有效地“保持对象”,如上述文档中所述。这是我应该关心的事情吗?
问候。
【问题讨论】: