C'è un modo per disattivare definitivamente Google Maps fino a quando non è necessario?


24

Google Maps sembra avere una quantità folle di Intenti registrati per questo, così come altri modi per iniziare.

Dal momento che questa è un'app piuttosto affamata di risorse (soprattutto per quanto riguarda la memoria), vorrei davvero che permanentemente non funzionasse a meno che / fino a quando non ne ho davvero bisogno. Tuttavia, Android continua a avviarlo continuamente, ad esempio quando cambia lo stato della connettività (cosa che per me accade abbastanza frequentemente in ambienti chiusi) o cambia la posizione GPS / rete.

Esiste un modo per garantire che Google Maps non avvii QUALSIASI processo, garantito, finché non faccio clic su un'icona per avviarlo deliberatamente?

Ambiente : Droid X, in esecuzione stock radicato Froyo 2.2; Ho Autostarts . e Advanced Task Killer, nonché la versione Pro di Titanium Backup installata.

Sono abbastanza aperto a quasi tutti i metodi, purché

  • È affidabile.

  • Mi consente di utilizzare Google Maps con la funzionalità prevista al 100% una volta che ne ho bisogno, senza richiedere 5 minuti di lavoro per la riconfigurazione.

  • Idealmente, non mi richiede di riavviare per usarlo, ma questo non è un killer.

  • Preferirei Vivamente un metodo generico che sarebbe applicabile ad altre applicazioni, NON solo a Google Maps.

  • Sono uno sviluppatore di software con una forte dose di esperienza nell'amministrazione di sistemi Unix / Linux. In altre parole, le soluzioni che richiedono il prompt della shell o la scrittura / esecuzione di script della shell (o Perl in Android Scripting Environment) sono estremamente benvenute.

    Le soluzioni che implicano la scrittura della mia app Java per Android sono accettabili purché siano sufficientemente dettagliate da consentire a un principiante di sviluppo Android di svolgere almeno un po 'di lavoro senza perdersi al 100%.

Cose che ho provato:

  • L'uccisione dei processi tramite Task Killer NON funziona, ma ritornano immediatamente o in breve tempo. Probabilmente tramite Intenti ma non certo al 100%.

  • Metodi standard per sbarazzarsi dei problemi di GMaps (disconnettersi da Latitude / spegnere GPS e localizzatore di rete). Questo sembra essere di grande aiuto, ma trovo inaccettabile la necessità di spegnere definitivamente il GPS / localizzatore, ad esempio non mi consente di eseguire applicazioni locali o attività Tasker basate su impostazioni locali.

  • Blocco tramite Titanium Backup Pro. Ciò richiede un riavvio e generalmente non molto piacevole.

I possibili approcci a cui ho pensato (ma non so come fare) sono:

  • In qualche modo elimina COMPLETAMENTE (disattiva) tutti gli Intenti registrati da Google Maps quando non necessari.

    Problemi: in primo luogo, non so quali TUTTI gli Intenti utilizza Google Maps.

    In secondo luogo, l'unico modo pratico per fare ciò che conosco è l'app Autostarts che NON è una soluzione praticabile - ci vogliono ~ 5-10 minuti per trovare e riattivare tutti gli intenti di cui sono a conoscenza (Autostarts è davvero scarso per -app intent management - è centrato sul per-intent), non importa i possibili intenti che Autostarts NON conosce (è una scatola nera, non so quali intenti manchino.

  • Avere uno script che rinominare i JAR o qualsiasi altra cosa i file eseguibili su Android sono (intero .apk?) Da dire GoogleMaps.apka GoogleMaps.disabled.apke ritorno.

    Problema: non so se sia possibile farlo su un Froyo con root. Inoltre, Google Maps è stato preinstallato su DroidX, quindi la ridenominazione in qualche modo influirebbe SOLO sull'aggiornamento ma non sull'app originale?

  • Avere uno script che andrà nell'APK e rinominare / spostare / svuotare il file manifest per rimuovere qualsiasi intento per quell'app.

    Problema: ciò richiederebbe una ricompilazione? Richiede sicuramente un riavvio che è meno


2
Tieni presente che sto chiedendo "Esiste un modo per disattivare definitivamente Google Maps fino a quando non è necessario?". Io non sto chiedendo "Devo bisogno di interrompere definitivamente Google Maps avvio?", O "Cosa sono soluzioni alternative per continuare a correre GMaps e ancora mantenere una buona durata della batteria".
DVK

"Blocco tramite Titanium Backup Pro. Ciò richiede un riavvio e generalmente non molto piacevole." Interessante. Lo fa per tutte le app o solo per qualcosa di più incorporato, come Maps?
Probabilità

@Chance - La mia impressione è stata che è per tutte le app.
DVK

3
L'hai provato davvero? Ho usato Ti-Bu per bloccare le app in precedenza e non ho dovuto riavviare.
Probabilità

@Chance - Le mie app che ho bloccato non hanno smesso di rigenerarsi in memoria fino al riavvio. Forse stavo sbagliando, ho iniziato a usare TBPro solo di recente.
DVK

Risposte:


5

Dalla tua menzione di Titanium Backup suppongo che il tuo dispositivo sia rootato. Quindi la mia raccomandazione assoluta qui è AutoRun Manager (e sì, avrai bisogno del Pro - secondo sì, ne vale la pena). Dopo averlo installato, apri l'app, utilizza la "modalità avanzata", cerca l'app che desideri modificare (nel tuo caso: Google Maps). Espandilo. ARM ti mostrerà tutti i suoi ascoltatori - disabilitali.

Questo è tutto. Nulla lo sveglia più se non lo si avvia esplicitamente. MA: Prima di avviarlo, potresti dover abilitare nuovamente quegli ascoltatori o potresti provare strani effetti collaterali (l'ho fatto). D'altra parte, almeno questo non richiede un riavvio.

Per i dettagli tecnici, potresti voler verificare con la domanda Come posso gestire le associazioni di intenti con le app o tuffarti direttamente nella sezione Intenti dei manuali per sviluppatori AOSP .


16

Per prima cosa, ti suggerisco di smettere di usare i tuoi assassini . Stanno scaricando la batteria più che salvarla. Il sistema riavvia i servizi quando è necessario che causino l'utilizzo della batteria.

In secondo luogo, si presume che liberare memoria sia una buona cosa. Non è. Liberare memoria non ridurrà l'utilizzo della batteria. Quello che devi davvero cercare sono le app che utilizzano molti cicli della CPU. Questo è ciò che scaricherà la batteria.

Android è basato su Linux. Linux vuole sempre usare tutta la memoria disponibile perché la memoria libera è memoria sprecata. Il sistema Android si occuperà di liberare la memoria delle applicazioni che non sono in uso in modo che altre applicazioni possano usarlo quando necessario.

Anche se provi a eliminare le applicazioni in esecuzione e occupano memoria, il sistema riavvierà questi servizi / app, il che provocherà il consumo della batteria perché probabilmente hanno una sincronizzazione che si verifica all'avvio o solo i cicli della CPU utilizzati per inizializzare l'applicazione. L'uccisione delle applicazioni farà apparire lento il dispositivo anche quando si tenta di avviare le applicazioni perché è necessario eseguire il backup di qualcosa che normalmente potrebbe essere in esecuzione prima di presentare l'interfaccia utente delle applicazioni.

Alcune cose che causeranno il consumo della batteria come GPS, wifi, bluetooth e utilizzo dei dati useranno molto di più la CPU per elaborare i dati che vengono trasmessi e ricevuti. La disattivazione di questi quando non in uso consente di risparmiare molto il consumo della batteria. Ho una batteria scarica nel mio dispositivo, non si carica nemmeno oltre il 94%, ma posso ottenere 12 o più ore dalla batteria se spengo questi servizi quando non ne ho bisogno.

Uso sempre google maps e nelle mie statistiche sulla batteria non è nemmeno elencato come un'app che utilizza risorse. Il mio utente con la batteria più alta è lo Screen @ 31% e il più basso mostrato è GMail @ 3%. Posso assicurarti che Google Maps non è la causa del consumo della batteria. L'uso di task killer è probabilmente la causa. Come ho già detto, utilizzo google maps per le indicazioni quasi quotidianamente e non è nemmeno nella top 10 delle app che utilizzano la mia batteria.

Maggiori informazioni sui task killer dal blog degli sviluppatori di Google Android .

Un malinteso comune sul multitasking Android è la differenza tra un processo e un'applicazione. In Android queste non sono entità strettamente collegate: le applicazioni possono sembrare presenti all'utente senza un processo effettivo che attualmente esegue l'app; più applicazioni possono condividere processi o un'applicazione può fare uso di più processi a seconda delle sue esigenze; il processo (i) di un'applicazione può essere mantenuto da Android anche quando l'applicazione non sta attivamente facendo qualcosa.

Il fatto che sia possibile vedere "in esecuzione" il processo di un'applicazione non significa che l'applicazione sia in esecuzione o che esegua operazioni. Potrebbe semplicemente essere lì perché Android ne aveva bisogno ad un certo punto e ha deciso che sarebbe meglio tenerlo in giro nel caso ne avesse bisogno di nuovo. Allo stesso modo, potresti lasciare un'applicazione per un po 'e tornare ad essa da dove avevi interrotto, e durante quel periodo Android potrebbe aver bisogno di sbarazzarsi del processo per altre cose.

Una chiave per il modo in cui Android gestisce le applicazioni in questo modo è che i processi non si chiudono in modo pulito. Quando l'utente lascia un'applicazione, il suo processo viene mantenuto in background, consentendogli di continuare a lavorare (ad esempio il download di pagine Web), se necessario, e di venire immediatamente in primo piano se l'utente ritorna su di esso. Se un dispositivo non esaurisce mai la memoria, Android manterrà tutti questi processi in giro, lasciando davvero tutte le applicazioni "in esecuzione" per tutto il tempo.

Naturalmente, c'è una quantità limitata di memoria e per soddisfare questo Android è necessario decidere quando sbarazzarsi dei processi che non sono necessari. Questo porta al ciclo di vita del processo Android, alle regole che utilizza per decidere quanto sia importante ogni processo e quindi al successivo che dovrebbe essere abbandonato. Queste regole si basano sia sull'importanza di un processo per l'esperienza attuale dell'utente, sia su quanto tempo è trascorso dall'ultima volta che il processo è stato necessario per l'utente.

Una volta che Android stabilisce che deve rimuovere un processo, lo fa brutalmente, semplicemente uccidendolo forzatamente. Il kernel può quindi recuperare immediatamente tutte le risorse necessarie al processo, senza fare affidamento sul fatto che quell'applicazione sia ben scritta e rispondente a una cortese richiesta di uscita. Consentire al kernel di recuperare immediatamente le risorse dell'applicazione rende molto più semplice evitare gravi situazioni di memoria esaurita.

Se un utente ritorna successivamente a un'applicazione che è stata uccisa, Android ha bisogno di un modo per riavviarlo nello stesso stato in cui è stato visto l'ultima volta, per preservare l'esperienza "tutte le applicazioni sono sempre in esecuzione". Questo viene fatto tenendo traccia delle parti dell'applicazione di cui l'utente è a conoscenza (le Attività) e riavviandole con informazioni sull'ultimo stato in cui sono state viste. Quest'ultimo stato viene generato ogni volta che l'utente lascia quella parte dell'applicazione, non quando viene ucciso, in modo che il kernel possa successivamente ucciderlo liberamente senza dipendere dall'applicazione per rispondere correttamente a quel punto.

In un certo senso, la gestione dei processi di Android può essere vista come una forma di spazio di scambio: i processi applicativi rappresentano una certa quantità di memoria in uso; quando la memoria è insufficiente, alcuni processi possono essere eliminati (scambiati); quando tali processi sono di nuovo necessari, possono essere riavviati dal loro ultimo stato salvato (scambiato).

Ecco un altro articolo che parla di come i Task Killer scaricheranno la batteria.

Non utilizzare il software di uccisione automatica delle attività
Per farla breve, l'uso di killer automatici può causare: un eccessivo consumo della batteria (come se il telefono non scarica già una batteria abbastanza velocemente), il telefono si surriscalda spesso e i programmi si spengono (arresto anomalo) in modo casuale: programmi che si desidera effettivamente utilizzare. Stai lontano da questi!

Una cosa che potresti fare se sei davvero impostato su "arresto delle mappe" fino a quando non vuoi usarlo è usare l'opzione Freeze nel backup di titanium. Ciò rimuoverà essenzialmente l'applicazione dal dispositivo e nessuno dei servizi ad essa associati verrà avviato fino a quando non verrà sbloccato.


1
liberare memoria fa in modo che il mio Droid X esegua la scansione estremamente lentamente con ~ 30-40 MB liberi di essere ragionevolmente reattivo e veloce con> 70 MB gratuiti, senza app che accolgano la CPU in entrambi i casi. Mi dispiace ma è un bel po 'di teoria che NON SI APPLICA in pratica.
DVK

Inoltre, quando il gestore della memoria Android uccide il mio browser Web perdendo TUTTE le mie schede aperte per fare spazio a Google Maps, questo è un grande successo di produttività.
DVK

4
Ti sto dicendo che quello che stai sperimentando è un effetto placebo. la memoria libera non rende il dispositivo più veloce, la CPU libera. Ho incluso un altro riferimento per te sull'argomento dei task killer (direttamente da Google)
Ryan Conrad,

2
L'uso di Task Killer provocherà il drenaggio e ho spiegato perché nella mia risposta. Inoltre, se leggi l'intera risposta, ti do una risposta esatta al tuo problema usando il titanio bloccando l'app.
Ryan Conrad,

3
@Chance no, perché se si interrompe un processo che non è effettivamente in esecuzione in quel momento, il sistema alla fine dovrà riavviare il processo e farà "tutta la sua inizializzazione" che utilizzerà la CPU. Solo perché un processo è in esecuzione, non significa che in realtà stia facendo qualcosa al momento.
Ryan Conrad,

11

Hai pensato di disinstallare e reinstallare Maps come possibile soluzione?

  1. Innanzitutto, elimina le mappe precaricate eliminando il /system/app/Maps.apkfile:

    su  
    rm /system/app/Maps.apk
    

    Una volta aggiornata un'app di sistema, è inutile nella cartella / system / app e può essere eliminata in modo sicuro.

  2. Quindi copia la versione corrente di Maps sulla tua scheda SD:

    cp /data/app/com.google.android.apps.maps*.apk /sdcard/
    
  3. Ora disinstalla l'app Maps:

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

    L'opzione "-k" mantiene le impostazioni per la reinstallazione dell'app.

  4. Ora per riavere Maps basta reinstallarlo dal backup:

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

È possibile automatizzare questi passaggi tramite GScript , che consente di creare collegamenti agli script. Quindi basta creare uno script chiamato "Disabilita Mappe" con il comando dal passaggio # 3 e un altro chiamato "Abilita Mappe" con il comando dal passaggio # 4 (selezionare "Ha bisogno di SU?" Per entrambi).

Ora puoi aggiungere 2 scorciatoie GScript alla schermata principale dagli script che hai creato utilizzando il normale metodo "Aggiungi collegamento" di Android (GScript sarà una delle opzioni lì).

L'unico inconveniente di questo metodo è che molto probabilmente perderai il collegamento di Maps (e / o il widget) dalla schermata iniziale quando lo disinstalli, richiedendo di aggiungerlo nuovamente dopo la reinstallazione. Ovviamente sarai ancora in grado di avviare Maps dal cassetto delle app.


Questa procedura sarebbe influenzata negativamente dal fatto che Maps fosse preinstallato sul mio DroidX? O che non era in ROM? +1 per un'ottima idea!
DVK

2
Se non si rimuove prima la versione di sistema dell'APK, la disinstallazione non riuscirà. In genere, una volta che un'app di sistema riceve un aggiornamento da Market, l'APK corrispondente nella cartella / system / app / può essere eliminato in modo sicuro.
Chahk,

1
@Grazie - Suppongo che, non essendo il bloatware di Verizon, in realtà ho accesso per rimuovere la versione del sistema fintanto che ho root? :)
DVK,

1
Finché il telefono è rootato, non dovresti avere problemi a rimuovere Maps.apk da / system / app.
Chahk,


1

Suggerisco di utilizzare la funzione Freeze del link di mercato della homepage di backup di Titanium . Credo che devi registrare l'app ($ 6,58) per utilizzare la funzione, ma ti assicuro che vale la pena pagare se ti piace hackerare il tuo telefono. L'altro motivo principale per pagare l'app (oltre a supportare lo sviluppatore per la scrittura di un bel software libero) è quello di essere in grado di eseguire installazioni batch (ovvero il ripristino dal backup) di app e dati di cui è stato eseguito il backup. Altrimenti devi passare attraverso le finestre di dialogo di installazione delle app standard.

Dal sito web sul congelamento:

Il congelatore app può disabilitare un'app (e renderla invisibile) senza disinstallarla

Oppure puoi effettivamente disinstallare e reinstallare. Potresti scoprire che ci sono ragioni per farlo oltre il congelamento, non lo so.


Siamo spiacenti, ma questo non è utile. Nella mia domanda, sotto "Cose che ho provato", punto n. 3: "Blocco tramite Titanium Backup Pro. Ciò richiede un riavvio e generalmente non molto piacevole."
DVK

0

Se il tuo telefono ha l'opzione Settings > Applications > Development > Stop app via long-press, puoi sempre chiudere Google Maps in questo modo, quindi questo processo viene ucciso anche fino a quando non apri di nuovo l'app.


-1

Eseguire il root del telefono, quindi utilizzare l'app AutoStarts da Google Play per disabilitare tutti gli eventi che attivano Maps. Funzionerà bene all'avvio manuale ma rimarrà quando lo uccidi. Disabilita qualsiasi altra cosa che non ti serve nella cartella degli eventi Dopo l'avvio per ridurre ulteriormente il consumo di memoria.


1
Hai letto attentamente la domanda? Dichiara esplicitamente: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 il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.