在android应用程序中使用google地图的人都知道,每个进程只能使用一个MapActivity。有一个bug discussing this in detail以及将每个mapaactivity放在单独进程中的解决方法。我不想在我的应用程序中这样做有几个原因,我已经开发了另一个似乎可行的解决方案。
对于每个包含map的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设置为其内容视图。
这对我来说似乎很管用。但这样做有什么坏处吗?我主要关心的是在包含映射的活动之间切换时产生的内存泄漏。

最佳答案

我想不这样做的唯一原因就是表演。map活动可能已经有点麻烦了,特别是在启动它时,因此如果您发现自己经常分配和释放视图,那么这可能执行得相当糟糕。但是,它实际上取决于视图的创建和删除频率,这完全取决于应用程序的行为方面。

10-07 18:43