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