Wakelock parziali bloccati

I blocchi di risveglio parziali sono un meccanismo nell'API PowerManager che consente agli sviluppatori di mantenere in esecuzione la CPU dopo lo spegnimento del display di un dispositivo (a causa del timeout del sistema o della pressione del tasto di accensione da parte dell'utente). L'app acquisisce un wakelock parziale chiamando acquire() con il flag PARTIAL_WAKE_LOCK. Un blocco parziale del risveglio diventa bloccato se viene mantenuto per molto tempo mentre la tua app è in esecuzione in background (nessuna parte dell'app è visibile all'utente). Questa condizione scarica la batteria del dispositivo perché impedisce al dispositivo di entrare in stati di alimentazione inferiori. I blocchi di risveglio parziali devono essere utilizzati solo quando necessario e rilasciati non appena non sono più necessari.

Se la tua app ha un blocco parziale della riattivazione bloccato, puoi utilizzare le indicazioni riportate in questa pagina per diagnosticare e risolvere il problema.

Rilevare il problema

Potresti non sapere sempre che i wakelock parziali della tua app sono bloccati. Se hai già pubblicato la tua app, Android vitals può aiutarti a rilevare il problema.

Android vitals

Android vitals può aiutarti a migliorare le prestazioni della tua app inviandoti un avviso tramite Play Console quando la tua app presenta blocchi parziali del risveglio bloccati. Android vitals segnala i wakelock parziali come bloccati quando in una sessione della batteria si verifica almeno un wakelock parziale di un'ora in background.

La definizione di sessione batteria dipende dalla versione della piattaforma.

  • In Android 10, una sessione di batteria è l'aggregazione di tutti i report sulla batteria ricevuti entro un determinato periodo di 24 ore. Un report sulla batteria fa riferimento all'intervallo tra due ricariche da meno del 20% al di sopra dell'80% o da qualsiasi livello di carica al 100%.
  • In Android 11, una sessione della batteria è un periodo fisso di 24 ore.

Il numero di sessioni della batteria visualizzato è aggregato per tutti gli utenti misurati dell'app. Per informazioni su come Google Play raccoglie i dati di Android vitals, consulta la documentazione di Play Console.

Una volta che sai che la tua app ha blocchi parziali di riattivazione bloccati eccessivi, il passaggio successivo è risolvere il problema.

Risolvi il problema

Poiché i blocchi di attivazione possono scaricare la batteria del dispositivo, non dovresti utilizzarli se esiste un'alternativa. La documentazione su come scegliere l'API giusta per mantenere il dispositivo attivo può aiutarti a trovare la soluzione migliore per la tua app.

Se devi utilizzare un blocco di attivazione, segui le best practice per i blocchi di attivazione per assicurarti che non influiscano negativamente sull'efficienza del dispositivo. In particolare, assicurati che ogni dispositivo acquistato sia sbloccato e rilascia la serratura il più rapidamente possibile.

Dopo aver risolto il problema nel codice, verifica che l'app rilasci correttamente i blocchi di risveglio utilizzando i seguenti strumenti:

  • dumpsys: uno strumento che fornisce informazioni sullo stato dei servizi di sistema su un dispositivo. Per visualizzare lo stato del servizio di alimentazione, che include un elenco di blocchi di riattivazione, esegui adb shell dumpsys power.

  • Battery Historian: uno strumento che analizza l'output di un report di bug di Android in una rappresentazione visiva degli eventi correlati al consumo energetico.