Google Play Services 6.5添加了getMapAsync
方法,该方法允许我们异步检索支持GoogleMap
(或MapFragment
)的MapView
对象。文档说明了
回调提供的GoogleMap对象非空。
我对这里为什么需要异步检索没有很好的理解(即,什么情况可能会导致已弃用的getMap
方法返回null
),这引出了以下问题:
使用MapFragment
时,我应该在getMapAsync
中调用onCreate
一次,存储回调返回的(非空)GoogleMap
,然后引用此在我班上的其他地方存储结果? 或,我应该在每次需要与getMapAsync
对象进行交互时调用GoogleMap
,并在相应的回调中执行所有与地图相关的工作?
第一个选项导致更紧凑的代码,所以我更愿意尽可能使用它。是否存在我存储的GoogleMap
对象可能变为“陈旧”或null
的风险(在这种情况下,第二个选项会更安全)?
答案 0 :(得分:5)
Google的地图相关示例,位于目录
中<path-to-sdk>/extras/google/google_play_services/samples/maps
保留参考,所以我相信这应该没问题。
你必须使用异步调用的原因是(我猜),因为地图在初始化时可能会执行网络请求(下载磁贴等,请参阅文档以获取更多信息)。如果是这种情况,则需要在单独的线程上(部分)初始化映射。因此,您必须等到初始化完成后才能获得GoogleMap
。
getMap()
函数可以正确返回GoogleMap
,但不能保证。如果您过早调用getMap()
函数,地图将不会被初始化,并且将返回null。