Как использовать несколько MapActivities / MapViews для приложения / процесса Android - PullRequest
10 голосов
/ 31 июля 2010

Я написал один класс MapActivity, который может отображать набор мест, а также отдельные места.При запуске приложение создает экземпляр этого MapActivity и отображает несколько мест.Если пользователь нажимает на определенное место, то запускается новый Activity, который показывает подробную информацию о выбранном месте.У этого действия есть пункт меню, который позволяет пользователю просматривать место на карте - это приводит к тому, что создается новый экземпляр MapActivity, за исключением того, что теперь отображается только это единственное место.

Проблема теперь в том, что если пользователь возвращается к первому MapActivity (тому, который показывает несколько мест), плитки больше не будут загружаться + иногда встречаются ошибки OutOfMemoryErrors.

Согласно Android JavaDocs, возможно иметь только один MapActivity на процесс.Однако я не хочу определять мой MapActivity как singleInstance / singleTask, поскольку пользователь всегда должен иметь возможность вернуться к первому MapActivity, которое показывает несколько мест.

Я видел, что приложение Google Places (которое поставляется с Google Map 4.4) для Android использует несколько экземпляров MapActivity.Как это возможно?И как я могу добиться этого в моем приложении?

Ответы [ 4 ]

20 голосов
/ 01 августа 2010

Согласно JavaDocs для Android, возможно иметь только один MapActivity на класс

Это не одно представление карты на класс, а на процесс.

ЭтоИзвестно, что могут возникнуть некоторые проблемы при использовании нескольких карт в одном процессе.Обычно это тот случай (ваше приложение работает в одном процессе), если вы не настроили ничего конкретного.Вы можете использовать атрибут android: process в своем манифесте, чтобы назначить свои действия:

<activity android:name=".activity.directory.MapView1" android:process=":MapView1">

<activity android:name=".activity.directory.MapView2" android:process=":MapView2">

Таким образом, у вас есть действия, выполняющиеся в отдельных процессах, что хорошо работает, если вы не используете общую статическую информацию.переменные для разных видов деятельности.

Также см. обсуждение ошибки в трекере ошибок Android:

http://code.google.com/p/android/issues/detail?id=3756

4 голосов
/ 29 июля 2011

Вы можете использовать более одного MapActivity для каждого процесса, если одновременно выполняется только один.Каждому MapActivity может быть присвоен только один MapView.Вы можете показать разные карты, повторно используя один и тот же MapView в одной и той же MapActivity.Вы можете повторно использовать MapView, объявив его как переменную статического класса, удалив его из представления, к которому он был добавлен в настоящий момент, когда вы закончили его отображать, присвоив ему новые координаты GPS и добавив его к следующему представлению.Когда вы закончите с этим MapActivity, завершите его, а затем вы сможете открыть новый MapActivity.Это работает, я делаю в моем приложении.

2 голосов
/ 07 апреля 2011

Другое простое решение: просто переопределите метод onDestroy всех ваших MapActivities, чтобы предотвратить закрытие ресурсов, например:

    @Override
    protected void onDestroy() {
        super.onStop();
    }

Мы должны вызвать onStop здесь, чтобы предотвратить выброс RuntimeException.Да, это взлом, но это работает.

1 голос
/ 29 апреля 2013

Обновление:

Google Maps Android API v2 поддерживает фрагменты. Это означает, что вы можете легко отобразить несколько карт, как любой другой фрагмент.

См. документацию и узнайте больше о новом MapFragment классе.

...