2011-02-25 8 views
14

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.

Respuesta

1

Supongo que la única razón para no hacer esto sería el rendimiento. La actividad del mapa ya puede ser un poco difícil, especialmente al iniciarlo, por lo que si se encuentra asignando y desasignando la vista con frecuencia, esto podría funcionar bastante mal. Sin embargo, depende realmente de la frecuencia con que se creará y eliminará la vista, lo que depende completamente de los aspectos de comportamiento de su aplicación.

+0

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. –

+0

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. –

Cuestiones relacionadas