use*_*068 14 android android-maps-v2
背景:
android.support.v4.app.FragmentActivity.在Android v2.2上运行.目的:
问题(S):
我可以标记/折线"保存"作为软件包的一部分,只需将其储存在他们重新显示onSaveInstanceState使用适当的savedInstance.put..方法和然后"恢复"他们onCreate使用适当的savedInstanceState.get..方法.
在查看Marker的描述getID()时,当Marker.getId()方法的Google文档声明如下时,我很困惑:
从Bundle 恢复地图时,也会恢复该地图上的标记.但是,这些标记将由不同的标记对象表示.标记的id可用于在此类恢复之后检索Marker对象的新实例.
谷歌文档(上面的粗体文字)使得听起来像标记只是自动恢复而无需采取任何行动.那不是我的经历......也许我错误地解释了所陈述的内容.或者你可能必须在Bundle中明确保存地图?有人可以澄清这意味着什么吗?
假设我必须通过适当的savedInstance.put...方法明确地将标记和折线保存到包中,我应该保存整个标记还是应该保存标记ID并使用标记ID检索标记信息以重新显示标记?我找不到一种put方法可以让我保存整个标记.
我注意到,MapFragment部分谷歌地图API的Android V2它的声明如下:
从GoogleMap获取的任何对象都与视图相关联.重要的是不要在视图的生命之外保持对象(例如标记).否则会导致内存泄漏,因为视图无法释放.
这个陈述让我相信我不应该尝试保存标记本身,而是尝试保存标记id,然后根据与标记id关联的标记对象重新生成标记.同样对于PolyLines.我的假设是否正确?
另外,我应该避免将Marker作为类变量吗?我担心的是,如果Marker是一个类变量,并且Activity Map片段放在后面的堆栈上,这可能会导致内存泄漏,因为它将有效地"保持对象",如前面提到的文档中所述.这是我应该关注的吗?
问候.
Mac*_*ski 14
我可以将标记/折线"保存"为捆绑包的一部分,只需使用适当的"savedInstance.put .."方法将它们保存在onSaveInstanceState中,然后使用适当的"恢复"在onCreate中"重新"显示它们. savedInstanceState.get .."方法.
没有.
谷歌文档(上面的粗体文字)使得听起来像标记只是自动恢复而无需采取任何行动.那不是我的经历......也许我错误地解释了所陈述的内容.或者你可能必须在Bundle中明确保存地图?有人可以澄清这意味着什么吗?
你没有误解任何东西.文档不正确.
我应该保存标记ID并使用标记ID检索标记信息以重新显示标记
标记ID在配置更改中不是永久性的 - 它取决于可视对象创建的顺序(首先调用addMarker返回具有ID"m1"的对象,第二个"m2").你不能以任何方式使用这个值(从API版本3.1.36开始)和恕我直言,它确实没有任何意义.我实际上已经将与ID相关的问题进行了总结.有至少应该是一个函数GoogleMap.getMarkerById(String)用于Marker.getId()做毫无意义.
3)另外,我应该避免将标记作为类变量吗?我担心的是,如果Marker是一个类变量,并且Activity Map片段放在后面的堆栈上,这可能会导致内存泄漏,因为它将有效地"保持对象",如前面提到的文档中所述.这是我应该关注的吗?
是.保持静态引用Marker或任何其他可视对象会导致泄漏.
并非回答所有问题和疑虑使其更接近解决方案,所以这是我的主张.
我假设你有一个数据组Markers,并Polylines从创建并可能将其存储在数据库是从web服务获取后.现在,如果你从数据库中加载它AsyncTask在你的Activity或者甚至没有将其存储在DB,但只取中Activity直接-这是很糟糕.
尽量使您的数据尽可能可访问,因此只需在进程被终止后(或在内存不足时丢弃它)后重新加载到内存中.如果你这样做 - 这很好.当然不是全部:如果你有20000个标记,每个标记都在信息窗口显示,它可以等待...
现在你拥有了在内存中创建标记所需的所有数据,只需像第一次那样创建它们.无需其他代码.
我们可以争论这是好的还是坏的想法,我会改进答案,但这需要更多关于上下文的信息:
当然还有另一种方法:你可以给MarkerOptions在onSaveInstanceState.如果您保持最新状态,或者如果您Markers没有更改,并且如果没有这么多,这可能对您有用.我无法理解在每次旋转或按HOME按钮时通过IPC发送数千个对象.
luc*_*cas 13
在我看来,调用setRetainInstance(true);保存地图的片段会通过暂停,方向更改等保留地图上的所有内容,而不必担心设置和获取.有什么理由说这不是推荐的方法吗?