我有一个MapActivity,你可以在MapView(谷歌地图)和OfflineMapView(我的班级,显示以前下载到SD卡的地图)之间切换。在地图之间切换时,我想完全销毁并创建地图视图,以便内存中只有一个地图视图。我想要这个有两个原因:
我试图从布局中删除MapView并将我的引用置空,但是当我想再次显示它时,我得到一个异常,说MapActivity只能有一个MapView。
修改 Google MapView的存在(可见性设置为GONE)对OfflineMapView FPS没有任何影响。我也没有得到任何OutOfMemoryErrors。
答案 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()
,因为它适用于这种情况。