getMapAsync() - 调用一次并保存结果,或者每次需要地图时调用?

时间:2015-02-10 13:12:03

标签: android google-maps google-play-services android-maps-v2

Google Play Services 6.5添加了getMapAsync方法,该方法允许我们异步检索支持GoogleMap(或MapFragment)的MapView对象。文档说明了

  

回调提供的GoogleMap对象非空。

我对这里为什么需要异步检索没有很好的理解(即,什么情况可能会导致已弃用的getMap方法返回null),这引出了以下问题:

使用MapFragment时,我应该在getMapAsync中调用onCreate一次,存储回调返回的(非空)GoogleMap,然后引用此在我班上的其他地方存储结果? ,我应该在每次需要与getMapAsync对象进行交互时调用GoogleMap,并在相应的回调中执行所有与地图相关的工作?

第一个选项导致更紧凑的代码,所以我更愿意尽可能使用它。是否存在我存储的GoogleMap对象可能变为“陈旧”或null的风险(在这种情况下,第二个选项会更安全)?

1 个答案:

答案 0 :(得分:5)

Google的地图相关示例,位于目录

<path-to-sdk>/extras/google/google_play_services/samples/maps

保留参考,所以我相信这应该没问题。

你必须使用异步调用的原因是(我猜),因为地图在初始化时可能会执行网络请求(下载磁贴等,请参阅文档以获取更多信息)。如果是这种情况,则需要在单独的线程上(部分)初始化映射。因此,您必须等到初始化完成后才能获得GoogleMap

getMap()函数可以正确返回GoogleMap,但不能保证。如果您过早调用getMap()函数,地图将不会被初始化,并且将返回null。