销毁MapView

时间:2011-02-27 12:51:53

标签: android android-mapview

我有一个MapActivity,你可以在MapView(谷歌地图)和OfflineMapView(我的班级,显示以前下载到SD卡的地图)之间切换。在地图之间切换时,我想完全销毁并创建地图视图,以便内存中只有一个地图视图。我想要这个有两个原因:

  1. 我的OfflineMapView占用了大部分可用内存来缓存切片。
  2. 谷歌MapView有一些附加的线程,当OfflineMapView可见时我不想运行。
  3. 我试图从布局中删除MapView并将我的引用置空,但是当我想再次显示它时,我得到一个异常,说MapActivity只能有一个MapView。

    修改 Google MapView的存在(可见性设置为GONE)对OfflineMapView FPS没有任何影响。我也没有得到任何OutOfMemoryErrors。

1 个答案:

答案 0 :(得分:4)

使用ActivityGroup作为Activity类,让它为每种类型的地图启动和停止子活动。例如,要获取Google地图的视图:

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(),因为它适用于这种情况。