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