Техника для запуска нескольких MapActivities в одном процессе - PullRequest
14 голосов
/ 25 февраля 2011

Людям, использующим Карты 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 в качестве представления содержимого.

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

1 Ответ

1 голос
/ 03 марта 2011

Я полагаю, что единственной причиной, по которой этого не делать, будет производительность.Работа с картой уже может быть немного собачьей, особенно при ее запуске, поэтому, если вы обнаружите, что часто выделяете и освобождаете представление, это может работать довольно плохо.Однако это действительно зависит от того, как часто представление будет создаваться и удаляться, что полностью зависит от поведенческих аспектов вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...