2011-02-27 79 views
1

我有一個MapActivity,您可以在MapView(Google Maps)和OfflineMapView(我的課程,顯示以前下載到SD卡的地圖)之間切換。在地圖之間切換時,我想完全銷燬並創建地圖視圖,以便只有一個地圖視圖位於內存中。我想要這樣做的原因有兩個:Destroy MapView

  1. 我的OfflineMapView將大部分可用內存用於緩存切片。
  2. Google MapView有一些附加的線程,我不想在OfflineMapView可見時運行。

我試圖從佈局中刪除MapView,並將其引用給它,但是當我想再次顯示它時,我得到一個異常,指出MapActivity只能有一個MapView。

編輯: 谷歌MapView(可見性設置爲GONE)的存在對OfflineMapView FPS沒有任何影響。我也沒有得到任何OutOfMemoryErrors。

+0

你完成()''MapActivity'嗎? – CommonsWare 2011-02-27 13:33:58

+0

不,我在我的活動頂部有一個地圖選擇器 - https://ssl.gstatic.com/android/market/cz.fhejl.pubtran.london/ss-3-320-480-160-2-7b9a7adb8d4c06ddd826ef8177959f2b05013739用戶可以選擇不同的離線地圖,我希望將Google MapView作爲其中一個選項。當Google Map被選中時,我想銷燬離線地圖(OfflineMapView)並創建Google MapView。通過「銷燬」我的意思是停止線程,清除位圖緩存並從佈局中刪除。當用戶切換回離線地圖時,Google MapView應該同樣銷燬。 – fhucho 2011-02-27 14:01:28

+0

我使用其他信息編輯了我的問題。 – fhucho 2011-02-27 14:20:18

回答

4

使用ActivityGroup作爲您的Activity類,並讓它爲每種類型的地圖啓動和停止子活動。例如,要獲取視圖的谷歌地圖:

Intent intent = new Intent(this, GoogleMapActivity.class); 
Window window = getLocalActivityManager().startActivity("google-map", intent); 
View googleMapView = window.getDecorView(); 
container.addView(googleMapView); 

摧毀它:

container.removeView(googleMapView); 
getLocalActivityManager().removeAllActivities(); 

,做同樣的與你的離線地圖。這應該完全停止MapActivity和它的線程。

請注意,我發現LocalActivityManager.destroyActivity()是越野車,所以我在示例中使用了LocalActivityManager().removeAllActivities(),因爲它適用於這種情況。