2

Google Play Services 6.5添加了getMapAsync方法,該方法允許我們異步檢索支持MapFragment(或MapView)的GoogleMap對象。文檔指出getMapAsync() - 調用一次並保存結果,或每次需要地圖時調用?

回調提供的GoogleMap對象非空。

我沒有,爲什麼這裏需要異步檢索非常瞭解(即什麼情況下可能會導致過時getMap方法返回null),這使我對以下問題:

在使用MapFragment時,我應該在onCreate中撥打getMapAsync一次,存儲回調返回的(非空)GoogleMap,然後在我的課程的其他地方引用此存儲結果? ,我應該每次撥打getMapAsync我需要與GoogleMap對象進行交互,並且做全部與地圖相關的工作在相應的回調裏面?

第一個選項導致代碼更緊湊,所以如果可能的話我寧願使用它。是否存在我存儲的GoogleMap對象可能會變爲「陳舊」或null(在這種情況下第二種選擇會更安全)的風險?

回答

4

谷歌的地圖相關的例子,位於目錄

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

保持一個參考,所以我相信這應該是罰款。

你必須使用異步調用的原因是(我想),因爲地圖可能會在初始化時發出網絡請求(要下載tile等,請參閱文檔以獲取更多信息)。如果是這種情況,則需要在單獨的線程上(部分)初始化映射。因此,您必須等到初始化完成後才能獲得GoogleMap

getMap()函數可以正確返回GoogleMap,但不能保證。如果您過早地致電getMap()函數,地圖將不會被初始化,它將返回null。

+1

謝謝,參考樣品是一個好主意!特別是,'CameraDemoActivity'是一個例子'Activity',它在異步檢索後存儲對'GoogleMap'對象的引用。只是想在評論中補充一下,以幫助他人立即找到一個具體的例子。 – stkent 2015-02-10 14:56:23

+0

即使存在網絡連接,我也可以確認舊的getMap()函數有時會返回null。這種情況很少發生,但發生了。新的getMapAsync()和OnMapReady()函數保證GoogleMap非空。 – 2016-01-23 21:12:15

相關問題