¿Hay alguna forma de desactivar Google Maps de forma permanente hasta que sea necesario?

24

Google Maps parece tener una cantidad increíble de Intenciones registradas, así como otras formas de iniciarse.

Dado que esta es una aplicación bastante hambrienta de recursos (especialmente en cuanto a memoria), me gustaría mucho que no se ejecute permanentemente a menos que / realmente la necesite. Sin embargo, Android lo sigue iniciando todo el tiempo, por ejemplo, cuando cambia el estado de conectividad (que para mí ocurre con bastante frecuencia en interiores) o cuando cambia la ubicación de GPS / red.

¿Hay alguna forma de garantizar que Google Maps no inicie CUALQUIER proceso, garantizado, hasta que haga clic en un icono para iniciarlo deliberadamente?

Entorno : Droid X, ejecutando stock rooteado Froyo 2.2; Tengo Autostarts . y Advanced Task Killer, así como la versión Pro de Titanium Backup instalada.

Estoy bastante abierto a casi cualquier método siempre que

  • Es confiable.

  • Me permite usar Google Maps con una funcionalidad 100% prevista una vez que lo necesito, sin requerir 5 minutos de trabajo para volver a configurarlo.

  • Idealmente, no requiere que reinicie para usarlo, pero este no es un factor decisivo.

  • ESTRICTAMENTE preferiría un método genérico que sería aplicable a otras aplicaciones, NO solo a Google Maps.

  • Soy un desarrollador de software con una gran dosis de experiencia en administración de sistemas Unix / Linux. En otras palabras, las soluciones que requieren una solicitud de shell o escribir / ejecutar scripts de shell (o Perl en Android Scripting Environment) son extremadamente bienvenidas.

    Las soluciones que implican escribir mi propia aplicación Java para Android son aceptables siempre que estén lo suficientemente detalladas como para que un novato en desarrollo de Android pueda realizar al menos algo de trabajo sin perder el 100%.

Cosas que probé:

  • Matar los procesos a través de Task Killer NO está funcionando: vuelven a funcionar, ya sea de inmediato o en poco tiempo. Probablemente a través de Intentos pero no 100% seguro.

  • Métodos estándar para deshacerse de los problemas de GMaps (cerrar sesión en Latitude / apagar el GPS y el localizador de red). Esto parece ayudar mucho, PERO encuentro inaceptable la necesidad de apagar permanentemente el GPS / localizador, por ejemplo, no me permite ejecutar la aplicación Locale o las cosas Tasker basadas en el entorno local.

  • Congelar a través de Titanium Backup Pro. Esto requiere un reinicio y generalmente no es muy agradable.

Los posibles enfoques en los que pensé (pero no sé cómo hacerlo) son:

  • De alguna manera, elimine TOTALMENTE (apague) todos los Intentos registrados por Google Maps cuando no sea necesario.

    Problemas: Primero, no sé cuáles son TODOS los intentos que utiliza Google Maps.

    En segundo lugar, la única forma práctica de hacer eso que conozco es la aplicación Autostarts, que NO es una solución viable: lleva ~ 5-10 minutos encontrar y volver a habilitar todos los intentos que conozco (Autostarts es realmente pobre por -Aplicación de intención de aplicación: se centra en la intención por intención), no importa las posibles intenciones que Autostarts NO conoce (es una caja negra, no sé qué intenciones se pierden si las hay.

  • Tener un script que cambiar el nombre de los archivos JAR o lo que los archivos ejecutables en Android son (toda APK?) De decir GoogleMaps.apka GoogleMaps.disabled.apkida y vuelta.

    Problema: No sé si esto es posible en un Froyo rooteado. Además, Google Maps estaba preinstalado en DroidX, por lo que cambiar el nombre de alguna manera SOLO afectaría la actualización, pero no la aplicación original.

  • Tenga un script que irá al APK y cambiará el nombre / moverá / vaciará el archivo de manifiesto para eliminar cualquier intento de esa aplicación.

    Problema: ¿Esto requeriría una recompilación? Definitivamente requiere un reinicio que es un menos

DVK
fuente
2
Tenga en cuenta que estoy preguntando "¿Hay alguna forma de desactivar Google Maps de forma permanente hasta que sea necesario?". No estoy preguntando "¿ Necesito detener permanentemente el inicio de Google Maps?", O "¿Cuáles son las soluciones para seguir ejecutando GMaps y mantener una buena duración de la batería".
DVK
"Congelar a través de Titanium Backup Pro. Esto requiere un reinicio y, en general, no es muy agradable". Eso es interesante. ¿Lo hace para todas las aplicaciones, o simplemente para algo más incrustado, como Maps?
Oportunidad
@Chance: mi impresión fue que es para todas las aplicaciones.
DVK
3
¿Realmente lo has intentado? He usado Ti-Bu para congelar aplicaciones antes, y no he tenido que reiniciar.
Oportunidad
@Chance: mis aplicaciones que congelé no dejaron de volver a aparecer en la memoria hasta que reinicié. Tal vez lo estaba haciendo mal, solo comencé a usar TBPro recientemente.
DVK

Respuestas:

5

Por su mención de Titanium Backup, supongo que su dispositivo está rooteado. Así que mi recomendación absoluta aquí es AutoRun Manager (y sí, necesitará el Pro; segundo sí, vale la pena). Una vez instalado, abra la aplicación, use el "modo avanzado", busque la aplicación que desea modificar (en su caso: Google Maps). Expandelo. ARM le mostrará a todos sus oyentes, deshabilítelos.

Eso es. Ya nada lo despierta a menos que lo inicie explícitamente. PERO: antes de comenzar, es posible que deba habilitar a esos oyentes nuevamente, o puede experimentar efectos secundarios extraños (lo hice). Por otro lado, al menos esto no requiere un reinicio.

Para obtener detalles técnicos, es posible que desee realizar una verificación cruzada con la pregunta ¿Cómo puedo administrar asociaciones de intenciones con aplicaciones o directamente sumergirme en la sección Intentos de los manuales para desarrolladores de AOSP ?

Izzy
fuente
16

Primero, te sugiero que dejes de usar tus asesinos de tareas . Están agotando su batería más que ahorrándola. El sistema está reiniciando los servicios cuando necesitan ejecutarse, lo que está causando el uso de la batería.

En segundo lugar, se supone que liberar memoria es algo bueno. No lo es. Liberar memoria no va a disminuir el uso de la batería. Lo que realmente necesita buscar son las aplicaciones que usan muchos ciclos de CPU. Esto es lo que agotará su batería.

Android está basado en Linux. Linux siempre quiere usar toda la memoria disponible porque la memoria libre es memoria desperdiciada. El sistema Android se encargará de liberar la memoria de las aplicaciones que no están en uso para que otras aplicaciones puedan usarlo cuando sea necesario.

Incluso si intenta eliminar aplicaciones que se están ejecutando y ocupando memoria, el sistema reiniciará estos servicios / aplicaciones, lo que provocará que se agote la batería porque probablemente tengan alguna sincronización al iniciarse, o solo los ciclos de CPU que se usan para inicializar la aplicación. La eliminación de las aplicaciones también hará que el dispositivo parezca lento cuando intente iniciar aplicaciones porque algo que normalmente se está ejecutando ahora debe reiniciarse antes de presentarle la interfaz de usuario de las aplicaciones.

Algunas cosas que causarán el agotamiento de la batería, como el uso de GPS, wifi, bluetooth y datos, usarán mucho más su CPU para procesar los datos que se transmiten y reciben. Apagarlos cuando no esté en uso ahorrará mucha batería. Tengo una batería defectuosa en mi dispositivo, ni siquiera se cargará más del 94%, pero puedo obtener 12 horas o más de mi batería si apago estos servicios cuando no los necesito.

Uso mapas de Google todo el tiempo, y en las estadísticas de mi batería ni siquiera aparece como una aplicación que utiliza recursos. Mi mayor usuario de batería es la pantalla @ 31%, y el más bajo que se muestra es GMail @ 3%. Les puedo asegurar que Google Maps no es la causa del agotamiento de la batería. Usar asesinos de tareas es más probable que sea la causa. Como dije, uso mapas de Google para obtener indicaciones casi a diario, y ni siquiera está en la lista de las 10 principales aplicaciones que usan mi batería.

Más información sobre los asesinos de tareas del blog Google Android Developers .

Un malentendido común sobre la multitarea de Android es la diferencia entre un proceso y una aplicación. En Android, estas no son entidades estrechamente vinculadas: las aplicaciones pueden parecer presentes para el usuario sin un proceso real que actualmente ejecute la aplicación; múltiples aplicaciones pueden compartir procesos, o una aplicación puede hacer uso de múltiples procesos dependiendo de sus necesidades; Android puede mantener el proceso (s) de una aplicación incluso cuando esa aplicación no está haciendo algo activamente.

El hecho de que pueda ver el proceso de una aplicación "ejecutándose" no significa que la aplicación se esté ejecutando o haciendo algo. Puede que simplemente esté allí porque Android lo necesitaba en algún momento, y ha decidido que sería mejor mantenerlo en caso de que lo necesite nuevamente. Del mismo modo, puede dejar una aplicación por un momento y volver a ella desde donde la dejó, y durante ese tiempo, Android podría haber necesitado deshacerse del proceso para otras cosas.

Una clave de cómo Android maneja las aplicaciones de esta manera es que los procesos no se cierran limpiamente. Cuando el usuario abandona una aplicación, su proceso se mantiene en segundo plano, lo que le permite continuar trabajando (por ejemplo, descargando páginas web) si es necesario, y pasar inmediatamente a primer plano si el usuario vuelve a ella. Si un dispositivo nunca se queda sin memoria, Android mantendrá todos estos procesos, dejando realmente todas las aplicaciones "en ejecución" todo el tiempo.

Por supuesto, hay una cantidad limitada de memoria, y para acomodar este Android debe decidir cuándo deshacerse de los procesos que no son necesarios. Esto lleva al ciclo de vida del proceso de Android, las reglas que utiliza para decidir qué tan importante es cada proceso y, por lo tanto, el siguiente que debe descartarse. Estas reglas se basan tanto en la importancia de un proceso para la experiencia actual del usuario como en el tiempo transcurrido desde la última vez que el usuario necesitó el proceso.

Una vez que Android determina que necesita eliminar un proceso, lo hace brutalmente, simplemente matándolo a la fuerza. El kernel puede reclamar inmediatamente todos los recursos necesarios para el proceso, sin depender de que la aplicación esté bien escrita y responda a una solicitud cortés de salir. Permitir que el kernel reclame de inmediato los recursos de la aplicación hace que sea mucho más fácil evitar situaciones graves de falta de memoria.

Si un usuario luego regresa a una aplicación que ha sido eliminada, Android necesita una forma de reiniciarla en el mismo estado en que se vio por última vez, para preservar la experiencia de "todas las aplicaciones se ejecutan todo el tiempo". Esto se realiza haciendo un seguimiento de las partes de la aplicación que el usuario conoce (las Actividades) y reiniciándolas con información sobre el último estado en el que se vieron. Este último estado se genera cada vez que el usuario abandona esa parte de la aplicación, no cuando se mata, de modo que el núcleo puede matarla más tarde sin depender de la aplicación para responder correctamente en ese punto.

De alguna manera, la gestión de procesos de Android puede verse como una forma de espacio de intercambio: los procesos de aplicación representan una cierta cantidad de memoria en uso; cuando la memoria es baja, algunos procesos pueden ser eliminados (intercambiados); cuando esos procesos se necesiten nuevamente, se pueden reiniciar desde su último estado guardado (intercambiado).

Aquí hay otro artículo que habla sobre cómo los asesinos de tareas agotarán la batería.

No utilice el software de eliminación automática de tareas
Para resumir, el uso de asesinos de tareas automáticas puede causar: agotamiento excesivo de la batería (como si el teléfono no agota la batería lo suficientemente rápido), el teléfono se sobrecalienta con frecuencia y los programas se apagan (bloqueo) al azar: programas que realmente desea utilizar. Manténgase alejado de estos!

Una cosa que podría hacer si realmente está configurado en "detener mapas" hasta que quiera usarlo es usar la opción Congelar en la copia de seguridad de titanio. Esto esencialmente eliminará la aplicación del dispositivo y ninguno de los servicios asociados comenzará hasta que lo descongele.

Ryan Conrad
fuente
1
liberar memoria hace que mi Droid X se arrastre extremadamente lento con ~ 30-40 MB gratis a ser razonablemente sensible y rápido con> 70MB gratis, sin aplicaciones que acaparen la CPU en ninguno de los casos. Lo siento, pero esa es una buena teoría que simplemente NO SE APLICA en la práctica.
DVK
Además, cuando el administrador de memoria de Android mata mi navegador web perdiendo TODAS mis pestañas abiertas para hacer espacio para Google Maps, eso es un gran éxito de productividad.
DVK
44
Te digo que lo que estás experimentando es un efecto placebo. la memoria libre no hace que su dispositivo funcione más rápido, la CPU libre lo hace. He incluido otra referencia para usted sobre el tema de los asesinos de tareas (directamente desde google)
Ryan Conrad
2
Usar el asesino de tareas causará drenaje, y expliqué por qué en mi respuesta. Además de eso, si lees la respuesta completa, te doy una respuesta exacta a tu problema usando titanio congelando la aplicación.
Ryan Conrad
3
@Chance no, porque si elimina un proceso que no se está ejecutando en ese momento, el sistema eventualmente tendrá que iniciar ese proceso nuevamente y realizará "toda su inicialización", que utilizará la CPU. El hecho de que un proceso se esté ejecutando no significa que realmente esté haciendo algo en ese momento.
Ryan Conrad
11

¿Has pensado en desinstalar y reinstalar Maps como una posible solución?

  1. Primero, elimine los mapas precargados eliminando el /system/app/Maps.apkarchivo:

    su  
    rm /system/app/Maps.apk
    

    Una vez que se actualiza una aplicación del sistema, es inútil en la carpeta / system / app y se puede eliminar de forma segura.

  2. Luego copie la versión actual de Maps en su tarjeta SD:

    cp /data/app/com.google.android.apps.maps*.apk /sdcard/
    
  3. Ahora desinstale la aplicación Mapas:

    pm uninstall -k com.google.android.apps.maps
    

    El interruptor "-k" mantiene la configuración para cuando reinstales la aplicación.

  4. Ahora para recuperar Maps, simplemente vuelva a instalarlo desde la copia de seguridad:

    pm install -r /sdcard/com.google.android.apps.maps*.apk
    

Puede automatizar estos pasos a través de GScript , que le permite crear accesos directos a los scripts. Así que solo cree un script llamado "Disable Maps" con el comando del paso 3, y otro llamado "Enable Maps" con el comando del paso 4 (marque "¿Necesita SU?" Para ambos).

Ahora puede agregar 2 accesos directos GScript a su pantalla de inicio desde los scripts que creó utilizando el método normal "Agregar acceso directo" de Android (GScript será una de las opciones allí).

El único inconveniente de este método es que lo más probable es que pierdas el acceso directo de Maps (y / o widget) de tu pantalla de inicio cuando lo desinstales, lo que requiere que lo vuelvas a agregar después de la reinstalación. Por supuesto, aún podrá iniciar Maps desde el cajón de aplicaciones.

Chahk
fuente
¿Este procedimiento se vería afectado negativamente por el hecho de que Maps estaba preinstalado en mi DroidX? ¿O eso no estaba en ROM? +1 por excelente idea!
DVK
2
Si no elimina primero la versión del sistema del APK, la desinstalación fallará. En general, una vez que una aplicación del sistema recibe una actualización de Market, su APK correspondiente en / system / app / folder se puede eliminar de forma segura.
Chahk
1
@Chank: supongo que, al no ser el bloatware de Verizon, ¿realmente tengo acceso para eliminar la versión del sistema siempre que tenga root? :)
DVK
1
Mientras su teléfono esté rooteado, no debería tener problemas para eliminar Maps.apk de / system / app.
Chahk
2

A partir de Android 4.0 Ice Cream Sandwich, simplemente puede deshabilitar Google Maps en la configuración del sistema . Esto no lo ayudará si todavía está atrapado en Froyo, pero otros pueden obtener algún beneficio de él.

Michael Hampton
fuente
¿Deshabilita todos los servicios asociados? (GM y Latitud, etc ...)?
DVK
Deshabilita esa aplicación por completo, incluido todo lo que trae. Hasta donde puedo decir, eso incluye Navegación, Latitud, etc.
Michael Hampton
1

Sugiero usar la función Freeze del enlace de mercado de la página de inicio de respaldo de Titanium . Creo que debe registrar la aplicación ($ 6.58) para usar la función, pero le aseguro que vale la pena el precio si desea hackear su teléfono. La otra razón principal para pagar la aplicación (que no sea para ayudar al desarrollador a escribir una buena pieza de software gratuito) es poder realizar instalaciones por lotes (es decir, restaurar desde la copia de seguridad) de las aplicaciones y los datos que ha respaldado. De lo contrario, debe pasar por los cuadros de diálogo de instalación de aplicaciones estándar.

Desde el sitio web sobre congelación:

El congelador de aplicaciones puede deshabilitar una aplicación (y hacerla invisible) sin desinstalarla

O bien, puede hacer una desinstalación y reinstalar. Es posible que haya razones para hacerlo durante el congelamiento, no lo sé.

halr9000
fuente
Lo siento, pero esto no es útil. En mi pregunta, en "Cosas que intenté", viñeta n. ° 3: "Congelar a través de Titanium Backup Pro. Esto requiere un reinicio y, en general, no es muy agradable".
DVK
0

Si su teléfono tiene la opción Settings > Applications > Development > Stop app via long-press, siempre puede cerrar Google Maps de esta manera, entonces este proceso también se anula hasta que abra la aplicación nuevamente.

Dielson Sales
fuente
-1

Rootee su teléfono y luego use la aplicación AutoStarts de Google Play para deshabilitar todos los eventos que activan Maps. Funcionará bien cuando se inicie manualmente, pero se mantendrá alejado cuando lo mate. Desactive cualquier otra cosa que no necesite en la carpeta de eventos After Startup para reducir aún más el consumo de memoria.

Yo aquí
fuente
1
¿Leíste la pregunta con cuidado? Establece explícitamente:Second, the only practical way of doing that that I know of is Autostarts app which is NOT a workable solution - it takes ~5-10 mins to find and re-enable all the intents I am aware of (Autostarts is really poor at per-app intent management - it's centered on per-intent), never mind possible intents that Autostarts does NOT know about (it's a black box, I don't know which intents are missed if any.
DVK