Come posso sapere che sono interessato?
Questa è probabilmente la prima domanda a coloro che non hanno familiarità con questo argomento. Con Gingerbread (Android 2.3) e versioni successive, hai un servizio a bordo che ti aiuta a capire: statistiche sulla batteria. Sebbene i produttori tendano a posizionarlo in punti diversi, si trova principalmente in Impostazioni → Informazioni sul telefono → Batteria o simile e mostra un elenco delle app che hanno utilizzato la maggior parte della batteria. Inoltre, c'è un piccolo grafico. Tocca quello e ti porta a una schermata simile a questa:
Schermata delle statistiche della batteria su Android 2.3
Ho scelto uno screenshot da uno dei miei dispositivi che illustra il problema. Osservando le due barre blu inferiori ("Aktiv" = Il dispositivo è stato tenuto sveglio (attivo), "Bildschirm an" = "Screen on"), la barra blu più a destra su "Aktiv" indica un WakeLock: il dispositivo è stato tenuto occupato nonostante il fatto che lo schermo fosse spento. Quindi con questo possiamo essere abbastanza sicuri di avere un WakeLock - ma non possiamo dire chi l'abbia causato.
Se il tuo dispositivo non offre questa schermata (o le barre in basso: ho appena scoperto, ad esempio, LG Optimus 4X con Android 4.0.3 ha tagliato queste barre), puoi trovarle, ad esempio, usando GSam Battery Monitor :
Informazioni simili da GSam Battery Monitor - qui le "barre blu" menzionate sono di colore giallo / arancione
Cosa ha causato WakeLock?
Sfortunatamente, non è possibile rispondere a questa domanda utilizzando app preinstallate (tranne, forse, alcune ROM personalizzate). Ma ci sono strumenti disponibili che possono. Il candidato più noto per questo è BetterBatteryStats e ci mostra la causa nella sua sezione parziale di wakelocks :
Schermate di BetterBatteryStats
Nel primo esempio 2 (tratto dalla pagina del playstore dell'app), l'evento che ha causato la maggior parte dei WakeLock è stato desiderato: non vogliamo che la riproduzione venga interrotta durante l'ascolto della musica. Quindi il secondo esempio 3 (tratto da un caso reale su uno dei miei dispositivi) potrebbe rivelarsi migliore: i 3 eventi più importanti sono causati dalla stessa app, che aveva bisogno di WakeLock per mantenere attivo il servizio push IMAP.
Per un'alternativa a BetterBatteryStats , controlla l' app Wakelock Detector menzionata nella risposta di UzumApps - che sembra più facile da gestire soprattutto per i non-tecnici:
Wakelock Detector - Clicca l'immagine per ingrandire. (Fonte: Google Play )
Cosa si può fare?
Se il caso è chiaro come nel secondo esempio della sezione precedente, l'azione è abbastanza ovvia - almeno nel mio caso: non ho bisogno di essere informato immediatamente quando arriva una mail; un ritardo di 30 minuti è assolutamente accettabile. Quindi sono entrato nell'app di posta, ho disabilitato Push IMAP (vedi anche: Push Email ) e invece sono passato a un intervallo di polling di 30 minuti. I WakeLock non sono completamente scomparsi, ma sono notevolmente diminuiti: la durata della batteria è notevolmente migliorata.
Poi c'è il caso menzionato nella domanda stessa: un'app che si comporta male non rilasciando WakeLock. Affronta lo sviluppatore con i tuoi risultati e chiedi una soluzione. Se consegna: problema risolto. In caso contrario: è quasi sempre disponibile un'app alternativa.
E se fosse il sistema Android stesso?
Sì, a volte sembra proprio questo: il 98% o più consumato da alcuni servizi Android. Oh, se è del 98%, nella maggior parte dei casi il candidato si chiama LocationManagerService . Cattivo che ci spia? Non necessariamente. In questo caso speciale, il "cattivo" elencato non è nemmeno colpevole, almeno non direttamente. Ecco un'altra app che richiede la posizione corrente troppo frequentemente. C'è un eccellente articolo su Setera.org a riguardo: Individuare il consumo della batteria Android LocationManagerService . Per dare un riassunto: utilizza Androiddumpsys
funzione (richiede root!) per scaricare uno stato del sistema e consente di esaminare i listener stabiliti per LocationManagerService. Uno sguardo più da vicino alla loro configurazione mostra che vengono costantemente "martellati" per le informazioni sulla posizione (alcuni lo fanno in modo permanente, cioè senza una pausa). Poiché l'ID dell'app è elencato insieme e in un altro punto del dump anche insieme al nome tecnico dell'app, è ancora possibile identificarlo e intraprendere le azioni appropriate.
E gli UFO?
Sfortunatamente, ci sono tali: App che hanno registrato un WakeLock e quindi sono usciti senza rilasciarlo. Ciò che resta sono * Unused F *** ing Obsoletes * - I WakeLock non vengono utilizzati. Quindi non c'è modo di portare semplicemente l'app in primo piano e riconfigurare o far rilasciare i suoi WakeLock.
Qui l'unica soluzione a me nota è un riavvio - e vorrei avere una soluzione migliore. Ovviamente, se conosci l'app colpevole, i passaggi relativi sono gli stessi di cui sopra: informa lo sviluppatore, ottieni una correzione o sostituisci l'app. Ma per sbarazzarsi dell'attuale WakeLock? Forse qualcun altro può fornire una migliore alternativa al riavvio?
Ci sono alcune letture consigliate?
Sicuro. Uno per ora, potrei aggiungere più tardi:
/sys/power/wake_lock
, ma che se lo avessi fatto nel modo "giusto" usando PowerManager e PowerManager.WakeLock, il servizio avrebbe entrambi il vero wakelock e rilascialo anche se il tuo processo è stato ucciso ...