Фон:
- Разработка собственного приложения для Android, использующего Android Google Map v2, использует
android.support.v4.app.FragmentActivity
. Работает на Android v2.2.
Цель:
- Сохранять маркеры/полилинии "нарисованы" на карте до изменения ориентации телефона.
Вопрос (ы):
-
Могу ли я "сохранить" маркеры/полилинии как часть пакета и просто повторить их, сохранив их в
onSaveInstanceState
с помощью соответствующих методовsavedInstance.put..
и затем "восстановить" их вonCreate
с использованием соответствующих методовsavedInstanceState.get..
.В обзоре описания для Marker
getID()
Я смущен, когда в документации Google дляMarker.getId()
method указано следующее:Когда карта восстанавливается из Bundle, маркеры , которые были на этой карте, также восстанавливаются. Однако эти маркеры будут представлены различными объектами Marker. Идентификатор маркера можно использовать для извлечения нового экземпляра объекта Marker после такого восстановления.
Документация Google (жирный текст выше) заставляет звучать так, как маркер просто восстанавливается автоматически, без каких-либо действий. Это не мой опыт... Может быть, я неправильно интерпретирую то, что говорится. Или, может быть, вам нужно явно сохранить карту в Bundle? Может кто-то уточнить, что это значит?
-
Предполагая, что я должен будет явно сохранить маркер и полилинии в комплекте с помощью соответствующего метода
savedInstance.put...
, должен ли я сохранить весь маркер или сохранить идентификатор маркера и получить информацию о маркерах с помощью идентификатора маркера повторно отобразить маркер? Я не смог найти методput
, который позволил бы мне сохранить весь маркер.Я заметил, что раздел
MapFragment
API Google Android Android v2 содержит следующее:Любые объекты, полученные из GoogleMap, связаны с представлением. Важно не останавливаться на объектах (например, маркерах) за пределами жизни. В противном случае это приведет к утечке памяти, поскольку представление не может быть выпущено.
Это утверждение заставляет меня думать, что я не должен пытаться сохранить сам маркер, а вместо этого попытаюсь сохранить и сохранить идентификатор маркера, а затем повторно сгенерировать маркер на основе объекта-маркера, связанного с идентификатором маркера. Аналогично для PolyLines. Правильно ли мое предположение?
-
Кроме того, следует ли избегать использования маркера как переменной класса? Меня беспокоит, что если маркер - это переменная класса, а фрагмент карты активности помещается в задний стек, это может вызвать утечку памяти, потому что она будет эффективно "держаться за объект", как указано в вышеупомянутой документации. Это то, о чем я должен беспокоиться?
С уважением.