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