【问题标题】:Destroy MapView销毁地图视图
【发布时间】:2011-02-28 11:59:49
【问题描述】:

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

  1. 我的 OfflineMapView 占用了大部分可用内存来缓存切片。
  2. Google MapView 有一些附加线程,我不想在 OfflineMapView 可见时运行这些线程。

我试图从布局中删除 MapView 并将我对它的引用设为空,但是当我想再次显示它时,我收到一个异常,说 MapActivity 只能有一个 MapView。

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

【问题讨论】:

  • 你是finish()MapActivity吗?
  • 没有。我的 Activity 顶部有一个地图选择器 - ssl.gstatic.com/android/market/cz.fhejl.pubtran.london/… 用户可以在不同的离线地图之间进行选择,我想将 Google MapView 作为选项之一。当谷歌地图被选中时,我想销毁离线地图(OfflineMapView)并创建谷歌地图视图。 “销毁”是指停止线程,清除位图缓存并从布局中删除。当用户切换回离线地图时,Google MapView 应该同样被销毁。
  • 我用附加信息编辑了我的问题。

标签: android android-mapview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2015-05-16
    • 2015-04-20
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多