Existe uma maneira de desativar permanentemente o Google Maps até ser necessário?

24

O Google maps parece ter uma quantidade insana de intenções registradas, além de outras formas de iniciar.

Como esse é um aplicativo que demanda muito recursos (principalmente em termos de memória), eu gostaria muito que ele permanecesse em execução permanentemente, a menos que eu realmente precise. No entanto, o Android continua iniciando o tempo todo - por exemplo, quando o status da conectividade é alterado (o que para mim acontece com bastante frequência em ambientes fechados) ou o local do GPS / rede.

Existe alguma maneira de garantir que o Google Maps não inicie QUALQUER processo, garantido, até clicar em um ícone para iniciá-lo deliberadamente?

Ambiente : Droid X, executando o rooted Froyo 2.2; Eu tenho arranques automáticos . e Advanced Task Killer, bem como a versão Pro do Titanium Backup instalada.

Estou bastante aberto a quase qualquer método, desde que

  • É confiável.

  • Ele permite que eu use o Google Maps com 100% da funcionalidade pretendida quando eu precisar, sem precisar de 5 minutos de trabalho para reconfigurar.

  • Idealmente, não requer que eu reinicie para usá-lo, mas este não é um bom negócio.

  • Eu preferiria fortemente um método genérico que seria aplicável a outros aplicativos, não apenas ao Google Maps.

  • Sou desenvolvedor de software com uma grande dose de experiência em administração de sistemas Unix / Linux. Em outras palavras, soluções que requerem prompt de shell ou scripts de escrita / execução de shell (ou Perl no Android Scripting Environment) são extremamente bem-vindas.

    As soluções que envolvem escrever meu próprio aplicativo Java Android são aceitáveis ​​desde que detalhadas o suficiente para que um novato em desenvolvimento Android possa realizar pelo menos algum trabalho sem estar 100% perdido.

Coisas que tentei:

  • Matar os processos via Task Killer NÃO está funcionando - eles voltam, imediatamente ou em pouco tempo. Provavelmente via Intents, mas não 100% certo.

  • Métodos padrão para se livrar dos problemas do GMaps (faça logout no Latitude / desligue o GPS e o localizador de rede). Isso parece ajudar muito, mas acho inaceitável a necessidade de desligar permanentemente o GPS / localizador - por exemplo, ele não me permite executar o aplicativo Locale ou coisas Tasker baseadas em localidade.

  • Congelar via Titanium Backup Pro. Isso requer uma reinicialização e geralmente não é muito agradável.

As possíveis abordagens em que pensei (mas não sei como fazer) são:

  • De alguma forma, elimine (desative) TODAS as intenções registradas pelo Google Maps quando não for necessário.

    Problemas: primeiro, não sei o que TODAS as intenções do Google Maps usam.

    Segundo, a única maneira prática de fazer isso que conheço é o aplicativo Autostarts, que NÃO é uma solução viável - leva de 5 a 10 minutos para encontrar e reativar todas as intenções que tenho conhecimento (o Autostarts é realmente ruim em - gerenciamento de intenção de aplicativo - é centrado por intenção), não importa as possíveis intenções que a Autostarts NÃO conhece (é uma caixa preta, não sei quais intenções são perdidas, se houver).

  • Ter um script que irá renomear os JARs ou o que os arquivos executáveis no Android são (.apk inteira?) De dizer GoogleMaps.apkpara GoogleMaps.disabled.apke volta.

    Problema: não sei se isso é possível em um Froyo enraizado. Além disso, o Google Maps foi pré-instalado no DroidX, portanto, a renomeação afetaria SOMENTE a atualização, mas não o aplicativo original?

  • Tenha um script que vá para o APK e renomeie / mova / esvazie o arquivo de manifesto para remover qualquer intenção desse aplicativo.

    Problema: Isso exigiria uma recompilação? Definitivamente requer uma reinicialização que é um sinal de menos

DVK
fonte
2
Observe que estou perguntando "Existe uma maneira de desativar permanentemente o Google Maps até que seja necessário?". Não estou perguntando " Preciso parar permanentemente o Google Maps de iniciar?" Ou "Quais são as soluções alternativas para continuar executando o GMaps e ainda manter uma boa bateria".
DVK
"Congelar via Titanium Backup Pro. Isso requer uma reinicialização e geralmente não é muito agradável." Isso é interessante. Faz isso para todos os aplicativos ou apenas para algo mais incorporado, como o Maps?
Chance
@ Chance - Minha impressão foi de que é para todos os aplicativos.
DVK
3
Você realmente tentou? Eu usei o Ti-Bu para congelar aplicativos antes e não precisei reiniciar.
Chance
@ Chance - Meus aplicativos que eu congelei não pararam de aparecer novamente na memória até reiniciar. Talvez eu estivesse fazendo errado - só comecei a usar o TBPro recentemente.
DVK

Respostas:

5

Pela sua menção ao Titanium Backup, presumo que seu dispositivo esteja enraizado. Portanto, minha recomendação absoluta aqui é o AutoRun Manager (e sim, você precisará do Pro - segundo sim, vale a pena). Tendo isso instalado, abra o aplicativo, use o "modo avançado", procure o aplicativo que você deseja modificar (no seu caso: Google Maps). Expanda-o. O ARM mostrará todos os seus ouvintes - desative-os.

É isso aí. Nada está despertando mais, a menos que você o inicie explicitamente. MAS: Antes de iniciá-lo, talvez seja necessário ativar esses ouvintes novamente ou você poderá experimentar efeitos colaterais estranhos (eu fiz). Por outro lado, pelo menos isso não requer uma reinicialização.

Para obter detalhes técnicos, convém verificar com a pergunta Como gerenciar associações de intenção com aplicativos ou mergulhar diretamente na seção Intents dos manuais do desenvolvedor do AOSP .

Izzy
fonte
16

Primeiro, sugiro que você pare de usar seus assassinos de tarefas . Eles estão drenando sua bateria mais do que salvando-a. O sistema está reiniciando os serviços quando eles precisam ser executados, o que está causando o uso da bateria.

Segundo, você assume que liberar memória é uma coisa boa. Não é. Liberar memória não diminui o uso da bateria. O que você realmente precisa procurar são os aplicativos que usam muitos ciclos de CPU. É isso que esgotará sua bateria.

O Android é baseado no Linux. O Linux sempre deseja usar toda a memória disponível, porque a memória livre é perda de memória. O sistema Android cuidará de liberar memória de aplicativos que não estão em uso, para que outros aplicativos possam usá-lo quando necessário.

Mesmo se você tentar matar os aplicativos que estão executando e consumindo memória, o sistema reiniciará esses serviços / aplicativos, o que causará o esgotamento da bateria, porque eles provavelmente têm alguma sincronização que acontece ao iniciar ou apenas os ciclos da CPU usados para inicializar o aplicativo. Matar os aplicativos também fará com que o dispositivo pareça lento ao tentar iniciar aplicativos, porque algo que normalmente pode estar em execução agora precisa ser reiniciado antes de apresentar a interface do usuário dos aplicativos.

Algumas coisas que causam o consumo de bateria, como GPS, wifi, bluetooth e uso de dados, vão usar muito mais a sua CPU para processar os dados que estão sendo transmitidos e recebidos. Desativá-los quando não estiverem em uso economizará bastante bateria. Tenho uma bateria defeituosa no dispositivo, ela nem carrega mais de 94%, mas posso tirar 12 ou mais horas da bateria se desligar esses serviços quando não precisar deles.

Eu uso o Google Maps o tempo todo e, nas estatísticas da minha bateria, ele nem é listado como um aplicativo usando recursos. O meu usuário com bateria mais alta é o Screen @ 31%, e o menor mostrado é o GMail @ 3%. Posso garantir, o Google Maps não é a causa do consumo de bateria. Usar assassinos de tarefas é mais provável a causa. Como eu disse, uso o Google Maps para obter direções quase diariamente, e ele nem está na lista dos 10 principais aplicativos que estão usando minha bateria.

Mais informações sobre assassinos de tarefas no blog do Google Android Developers .

Um mal-entendido comum sobre a multitarefa do Android é a diferença entre um processo e um aplicativo. No Android, essas não são entidades fortemente acopladas: os aplicativos podem parecer presentes ao usuário sem um processo real atualmente executando o aplicativo; vários aplicativos podem compartilhar processos ou um aplicativo pode fazer uso de vários processos, dependendo de suas necessidades; o (s) processo (s) de um aplicativo pode ser mantido pelo Android mesmo quando esse aplicativo não está fazendo algo ativamente.

O fato de você poder ver o processo de um aplicativo "em execução" não significa que o aplicativo esteja em execução ou fazendo alguma coisa. Pode simplesmente estar lá porque o Android precisava dele em algum momento e decidiu que seria melhor mantê-lo por perto caso ele precisasse novamente. Da mesma forma, você pode deixar um aplicativo um pouco e retornar a ele de onde parou e, durante esse período, o Android pode ter precisado se livrar do processo para outras coisas.

A chave para como o Android lida com aplicativos dessa maneira é que os processos não são encerrados de maneira limpa. Quando o usuário sai de um aplicativo, seu processo é mantido em segundo plano, permitindo que ele continue trabalhando (por exemplo, fazendo download de páginas da Web), se necessário, e chegue imediatamente ao primeiro plano se o usuário retornar a ele. Se um dispositivo nunca ficar sem memória, o Android manterá todos esses processos, deixando todos os aplicativos "em execução" o tempo todo.

Obviamente, há uma quantidade limitada de memória e, para acomodar esse Android, você deve decidir quando se livrar de processos desnecessários. Isso leva ao ciclo de vida do processo do Android, às regras que ele usa para decidir a importância de cada processo e, portanto, o próximo que deve ser descartado. Essas regras baseiam-se tanto na importância de um processo para a experiência atual do usuário quanto no tempo decorrido desde a última vez que o processo foi necessário ao usuário.

Depois que o Android determina que precisa remover um processo, ele faz isso brutalmente, simplesmente matando-o à força. O kernel pode recuperar imediatamente todos os recursos necessários pelo processo, sem depender de que o aplicativo seja bem escrito e responda a uma solicitação educada de saída. Permitir que o kernel recupere imediatamente os recursos do aplicativo facilita muito evitar situações graves de falta de memória.

Se um usuário retornar posteriormente a um aplicativo que foi morto, o Android precisará de uma maneira de reiniciá-lo no mesmo estado em que foi visto pela última vez, para preservar a experiência "todos os aplicativos estão executando o tempo todo". Isso é feito acompanhando as partes do aplicativo que o usuário conhece (as Atividades) e reiniciando-as com informações sobre o último estado em que foram vistas. Esse último estado é gerado sempre que o usuário sai dessa parte do aplicativo, não quando ele é morto, para que o kernel possa livremente matá-lo livremente sem depender do aplicativo para responder corretamente naquele momento.

De certa forma, o gerenciamento de processos do Android pode ser visto como uma forma de espaço de troca: os processos de aplicativos representam uma certa quantidade de memória em uso; quando a memória está baixa, alguns processos podem ser eliminados (trocados); quando esses processos são necessários novamente, eles podem ser reiniciados a partir do último estado salvo (trocado).

Aqui está outro artigo falando sobre como os assassinos de tarefas esgotam sua bateria.

Não use o software Automatic Task Killing
Para resumir uma longa história, o uso de killers de tarefas automáticas pode causar: consumo excessivo de bateria (como se o telefone não descarregasse a bateria rápido o suficiente), o telefone superaquecesse com frequência e os programas seriam desligados (travando) aleatoriamente - programas que você realmente deseja usar. Fique longe disso!

Uma coisa que você pode fazer se estiver realmente definido em "parar mapas" até que você queira usá-lo é usar a opção Congelar no backup de titânio. Isso essencialmente removerá o aplicativo do dispositivo e nenhum dos serviços associados a ele será iniciado até que você o retire do congelamento.

Ryan Conrad
fonte
11
liberar memória faz com que o meu Droid X rastreie extremamente devagar com ~ 30-40 MB de liberdade e seja razoavelmente responsivo e rápido com> 70 MB de liberdade, sem aplicativos que estejam sobrecarregando a CPU em ambos os casos. Sinto muito, mas essa é uma boa teoria que simplesmente não se aplica na prática.
DVK
Além disso, quando o gerenciador de memória Android mata meu navegador, perdendo TODAS as minhas abas abertas para abrir espaço para o Google Maps, isso é um grande golpe de produtividade.
DVK
4
Estou lhe dizendo, o que você está enfrentando é um efeito placebo. memória livre não faz seu dispositivo funcionar mais rápido, CPU livre sim. Eu incluí uma outra referência para você sobre o tema de assassinos tarefa (desde google)
Ryan Conrad
2
Usar o killer de tarefas causará drenagem, e expliquei o porquê na minha resposta. Além disso, se você ler a resposta inteira, eu lhe dou uma resposta exata para o seu problema usando titânio congelando o aplicativo.
Ryan Conrad
3
@ Não, porque se você matar um processo que não está realmente em execução no momento, o sistema terá que iniciar o processo novamente e fará "toda a sua inicialização", que utilizará a CPU. Só porque um processo está em execução, não significa que ele esteja realmente fazendo algo no momento.
21412 Ryan Conrad
11

Você já pensou em desinstalar e reinstalar o Maps como uma possível solução?

  1. Primeiro, livre-se dos mapas pré-carregados excluindo o /system/app/Maps.apkarquivo:

    su  
    rm /system/app/Maps.apk
    

    Depois que um aplicativo do sistema é atualizado, ele é inútil na pasta / system / app e pode ser excluído com segurança.

  2. Em seguida, copie a versão atual do Google Maps para o seu cartão SD:

    cp /data/app/com.google.android.apps.maps*.apk /sdcard/
    
  3. Agora desinstale o aplicativo Maps:

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

    A opção "-k" mantém as configurações para quando você reinstalar o aplicativo.

  4. Agora, para recuperar o Google Maps, basta reinstalá-lo a partir do backup:

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

Você pode automatizar essas etapas via GScript , o que permite criar atalhos para scripts. Portanto, basta criar um script chamado "Desativar mapas" com o comando da etapa 3 e outro chamado "Ativar mapas" com o comando da etapa 4 (marque "Precisa de SU?" Para ambos).

Agora você pode adicionar 2 atalhos do GScript à sua tela inicial a partir dos scripts criados usando o método "Adicionar atalho" normal do Android (o GScript será uma das opções).

A única desvantagem desse método é que você provavelmente perderá o atalho do Google Maps (e / ou widget) da tela inicial ao desinstalá-lo, exigindo que você o adicione novamente após a reinstalação. Obviamente, você ainda poderá iniciar o Google Maps a partir da gaveta do aplicativo.

Chahk
fonte
Esse procedimento seria afetado negativamente pelo fato de o Maps ter sido pré-instalado no meu DroidX? Ou isso não estava na ROM? +1 para uma excelente ideia!
DVK
2
Se você não remover a versão do sistema do APK primeiro, a desinstalação falhará. Geralmente, quando um aplicativo do sistema recebe uma atualização do Market, seu APK correspondente na pasta / system / app / pode ser excluído com segurança.
Chahk
11
@ Obrigado - Eu suponho que, não sendo Verizon bloatware, eu realmente tenho acesso para remover a versão do sistema, desde que eu tenha root? :)
DVK
11
Enquanto seu telefone estiver enraizado, você não terá problemas para remover o Maps.apk de / system / app.
Chahk 02/02
2

A partir do Android 4.0 Ice Cream Sandwich, você pode simplesmente desativar o Google Maps nas configurações do sistema . Isso não irá ajudá-lo se você ainda estiver preso no Froyo, mas outros poderão obter algum benefício com isso.

Michael Hampton
fonte
Desativa todos os serviços associados? (GM e Latitude, etc ...)?
DVK
Ele desativa esse aplicativo completamente, incluindo tudo o que ele traz. Até onde eu sei, isso inclui Navegação, Latitude etc.
Michael Hampton
1

Sugiro usar o recurso Freeze do link do mercado da página inicial de backup do Titanium . Eu acredito que você precisa registrar o aplicativo (US $ 6,58) para usar o recurso, mas garanto que vale a pena o preço, se você gosta de hackear o telefone. O outro principal motivo para pagar pelo aplicativo (que não seja o suporte ao desenvolvedor para a criação de um bom software livre) é ser capaz de fazer instalações em lote (ou seja, restaurar do backup) dos aplicativos e dados dos quais você fez backup. Caso contrário, você precisará acessar as caixas de diálogo padrão de instalação de aplicativos.

No site sobre congelamento:

O congelador de aplicativos pode desativar um aplicativo (e torná-lo invisível) sem desinstalá-lo

Ou você pode realmente desinstalar e reinstalar. Você pode achar que há razões para fazer isso congelando, não sei.

halr9000
fonte
Desculpe, mas isso não é útil. Na minha pergunta, em "Coisas que eu tentei", ponto 3: "Congelar via Titanium Backup Pro. Isso requer uma reinicialização e geralmente não é muito agradável".
DVK
0

Se o seu telefone tiver a opção Settings > Applications > Development > Stop app via long-press, você sempre poderá fechar o Google Maps dessa maneira; esse processo também será interrompido até você abrir o aplicativo novamente.

Dielson Sales
fonte
-1

Faça root no seu telefone e use o aplicativo AutoStarts do Google Play para desativar todos os eventos que acionam o Maps. Ele funcionará bem quando iniciado manualmente, mas permanecerá ausente quando você o matar. Desative qualquer outra coisa que você não precise na pasta de eventos Após a inicialização para reduzir ainda mais o consumo de memória.

Eu aqui
fonte
11
Você leu a pergunta com atenção? Afirma explicitamente: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