Es bien sabido para las personas que usan Google Maps en una aplicación de Android que solo pueden usar un MapActivity
por proceso. Hay un bug discussing this in detail junto con la solución de poner cada MapActivity en un proceso separado. No quiero hacer esto en mi aplicación por alguna razón y he desarrollado otra solución alternativa que parece funcionar.Técnica para ejecutar múltiples MapActivities en el mismo proceso
Para cada Activity
que contiene un mapa, lo tengo extender ActivityGroup
y crear/destruir el MapActivity
en onResume
/ como una actividad secundaria. Esto garantiza que solo habrá una instancia de MapActivity
a la vez (suponiendo que muestre una Activity
a la vez). A continuación se muestra una versión simplificada de mi aplicación:
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();
}
}
El MapActivity
estoy usando es nada especial y no requiere ninguna modificación. Simplemente establece MapView
como su vista de contenido.
Esto parece funcionar bien para mí. ¿Pero hay algún inconveniente para hacer esto? Mi principal preocupación es una pérdida de memoria creada al pasar de una actividad que contiene un mapa.
Estaba preocupado por esto también, pero en realidad funciona mucho mejor de lo que pensaba. 'MapActivity' debe mantener las cosas que hace en su inicialización en la memoria. Y también hay que sopesar esta técnica con la alternativa de poner cada 'MapActivity' en un proceso separado. –
Eso es exactamente lo que parece hacer MapActivity. Comienza algún tipo de reutilización en el caché del dispositivo que administra la biblioteca. Feliz de tener la confirmación de que esto funciona bien. –