Метод для запуска нескольких MapActivities в одном процессе

Людям, использующим Карты Google в приложении для Android, хорошо известно, что они могут использовать только одну MapActivity для каждого процесса. Это ошибка, подробно обсуждающая это , а также обходной путь помещения каждой 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 в качестве представления содержимого.

Мне кажется, это нормально работает. Но есть ли в этом обратная сторона? Меня больше всего беспокоит утечка памяти, возникающая при переходе между действиями, содержащими карту.

14
задан Jason Hanley 25 February 2011 в 14:01
поделиться