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