He escrito una MapActivity clase que es capaz de mostrar un conjunto de lugares, así como los lugares. En el inicio, la aplicación crea una instancia de esta MapActivity y muestra varios lugares. Si el usuario hace clic en un cierto lugar, entonces, una nueva Activity es lanzado, que muestra los detalles del lugar seleccionado. Esta actividad tiene un elemento de menú que permite al usuario ver el lugar en un mapa – esto hace que una nueva instancia de la MapActivity se crea, excepto que ahora sólo este único lugar aparecen.

El problema ahora es que si el usuario se desplaza de nuevo a la primera MapActivity (la que muestra varios lugares) los azulejos no será cargado ya + a veces OutOfMemoryErrors se encuentran.

De acuerdo con el Android JavaDocs, sólo es posible tener una MapActivity por proceso. Sin embargo, no quiero definir mi MapActivity como una instancia única/singleTask, ya que el usuario siempre debe ser capaz de navegar de vuelta a la primera MapActivity que muestra varios lugares.

He visto que los sitios de Google app (que ha llegado con Google Mapa 4.4) para Android usos múltiples MapActivity instancias. ¿Cómo es esto posible? Y ¿cómo puedo lograr en mi aplicación?

OriginalEl autor stacky | 2010-07-31

4 Comentarios

  1. 20

    De acuerdo con el Android JavaDocs,
    sólo es posible tener una
    MapActivity por clase

    No es una vista de mapa por clase, es por proceso.

    Se sabe que usted puede experimentar algunos problemas cuando se utilizan múltiples mapviews en un proceso. Generalmente este es el caso (la aplicación se ejecute en un solo proceso) en caso de no configurar nada en específico.
    Usted podría pesar de que uso el android:proceso de atributo en el archivo de manifiesto para asignar a su acitivites:

    <activity android:name=".activity.directory.MapView1" android:process=":MapView1">
    
    <activity android:name=".activity.directory.MapView2" android:process=":MapView2">

    De esta manera que usted tiene de las actividades que se ejecutan en procesos independientes, que funciona bien si usted no uso compartido de las variables estáticas a través de actividades.

    Ver también la discusión sobre el error en el android rastreador de errores:

    http://code.google.com/p/android/issues/detail?id=3756

    Gracias por tu respuesta. Yo ya sabía acerca de la posibilidad de utilizar el android:proceso de atributo. Sin embargo, en mi caso sólo tengo una MapActivity definido en el AndroidManifest.xml el archivo, que es capaz de mostrar múltiples lugares, así como los lugares. Ahora podía dividir esta sola MapActivity en dos MapActivities (como lo sugieren), pero me pregunto si hay otras soluciones – no creo que en los sitios de Google app para Android cada MapActivity instancia se ejecuta en un proceso independiente. Hasta el momento, prefiero re-diseño de la aplicación s.t. siempre uno sólo MapActivity está activo.
    Buscando en el archivo de registro mientras se ejecuta Google Places, las actividades están todos dentro del mismo proceso, puedo confirmar que. Sin embargo, yo no asumir que las Aplicaciones de Google son enteramente basado en la pública componentes del SDK, pero sólo tienen algunos no pública de los componentes personalizados así; es decir, que es por qué Google Maps utiliza un mapa diferente azulejos proveedor, y es más preciso que el MapView de la SDK, etc. El enfoque de procesos es el común al trabajar con el SDK y hasta la fecha la única solución que yo sepa, también hace referencia a el Android dev grupo y el SDK de Android bug tracker.
    Mi aplicación contiene el diseño de la ficha(TabHost, TabSpec). Estoy usando dos vistas de mapas en mi aplicación. Así que si estoy permitiendo a vista de satélite en uno de la vista de mapa, a continuación, otro mapa también se muestra en la vista de satélite, si arrastra un mapa hacia estados UNIDOS otra vista de mapa también es arrastrado hacia estados UNIDOS, no importa donde anteriormente se apunta. He utilizado la solución anterior, pero no es la solución de mi problema. ¿Cuál puede ser el problema?
    He creado una sencilla aplicación. Una actividad que contiene el botón de inicio de actividad a distancia. Pulsando el Botón de crea otro tipo de actividad a distancia puedo ver en el DDMS. Pero cuando se trata de mi ficha(TabHost, TabSpec) de la aplicación no está funcionando!!!

    OriginalEl autor Mathias Conradt

  2. 4

    Usted puede tener más de una MapActivity por proceso siempre y cuando sólo uno se está ejecutando en un momento. Cada MapActivity sólo puede tener un MapView asignado. Usted puede mostrar diferentes mapas mediante la reutilización de la misma MapView en el mismo MapActivity. Se puede reutilizar un MapView declarándola como una clase estática variable, la eliminación de la opinión de que era actualmente añadido para cuando termine de mostrar, dándole nuevas coordenadas GPS y agregarlo a la siguiente vista. Cuando haya terminado con la que MapActivity finalizar y, a continuación, puede abrir un nuevo MapActivity. Esto funciona, que debo hacer en mi aplicación.

    OriginalEl autor Danny Remington – OMS

  3. 2

    Otra solución sencilla: simplemente reemplazar método onDestroy de todos los de su MapActivities para evitar el cierre de los recursos, por ejemplo:

        @Override
        protected void onDestroy() {
            super.onStop();
        }

    Debemos invocar onStop aquí para evitar RuntimeException lanzado. Sí, eso es un hack, pero funciona.

    funciona como un encanto!
    Esto no funciona

    OriginalEl autor Flavio

Dejar respuesta

Please enter your comment!
Please enter your name here