对于在Android应用中使用Google地图的人来说,他们每个进程只能使用一个MapActivity
。有一个bug discussing this in detail以及将每个MapActivity放在一个单独的进程中的解决方法。出于某些原因,我不想在我的应用程序中执行此操作,并且已经开发了另一种似乎有用的解决方法。
对于包含地图的每个Activity
,我将其展开ActivityGroup
并创建/销毁MapActivity
/ onResume
中的onPause
作为子活动。这样可以确保一次只有一个MapActivity
个实例(假设您一次只显示一个Activity
)。以下是我的实施的简化版本:
public class MyMapActivityGroup extends ActivityGroup {
@Override
protected void onResume() {
super.onResume();
addMapView();
}
@Override
protected void onPause() {
super.onPause();
removeMapView();
}
private void addMapView() {
Intent intent = new Intent(this, MyMapActivity.class);
Window window = getLocalActivityManager().startActivity("map", intent);
setContentView(window.getDecorView());
}
private void removeMapView() {
setContentView(new FrameLayout(this));
getLocalActivityManager().removeAllActivities();
}
}
我使用的MapActivity
没什么特别的,不需要任何修改。它只是将MapView
设置为其内容视图。
这对我来说似乎很好。但这样做有什么不利之处吗?我主要担心的是在包含地图的活动之间创建的内存泄漏。
答案 0 :(得分:1)
我猜想不这样做的唯一原因就是表现。地图活动可能已经有点像狗了,特别是在启动时,所以如果你发现自己经常分配和取消分配视图,这可能表现得非常糟糕。但是,它实际上取决于创建和删除视图的频率,这完全取决于应用程序的行为方面。