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

stk*_*ent 3 android google-maps google-play-services android-maps-v2

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

回调提供的GoogleMap对象为非null.

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

当使用a时MapFragment,我应该调用getMapAsync一次onCreate,存储GoogleMap回调返回的(非null),然后在我的类中的其他地方引用这个存储的结果吗?或者,我是否应该getMapAsync每次需要与GoogleMap对象进行交互时调用,并在相应的回调中执行所有与地图相关的工作?

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

Sny*_*rsK 5

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

<path-to-sdk>/extras/google/google_play_services/samples/maps
Run Code Online (Sandbox Code Playgroud)

保持参考,所以我相信这应该没问题.

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

getMap()函数可以GoogleMap正确返回,但不能保证.如果你getMap()太快调用该函数,地图将不会被初始化,它将返回null.