Quando l'utente lascia inattivo il proprio dispositivo Android, questo passa rapidamente allo stato di sospensione per evitare di scaricare la batteria. Tuttavia, a volte un'app deve impedire alla CPU di passare allo stato di sospensione. In alcuni casi, l'app potrebbe dover mantenere lo schermo acceso durante il funzionamento. In altri casi, l'app non deve mantenere lo schermo attivo, ma deve comunque avere la CPU attiva.
L'approccio che scegli dipende dalle esigenze della tua app. Tuttavia, come regola generale, devi utilizzare l'approccio più leggero possibile per ridurre al minimo l'impatto della tua app sulle risorse di sistema. Questo documento ti aiuta a scegliere la tecnologia Android corretta per la tua situazione.
Scegli la tecnologia giusta
L'opzione migliore per mantenere attivo il dispositivo dipende dalle esigenze della tua app. Questa sezione ti aiuta a scegliere l'approccio giusto.
- La tua app deve mantenere lo schermo acceso?
- Se la risposta è Sì, consulta Mantenere lo schermo acceso. Potrebbe esserci un'API per scopi speciali che fa al caso tuo. Ad esempio, se stai implementando un'interfaccia utente per le chiamate, puoi utilizzare il framework Android Telecom, che mantiene lo schermo attivo quando necessario. Se non esiste un'API per scopi speciali per la tua situazione, puoi utilizzare l'API
keepScreenOn
.
- Se la risposta è Sì, consulta Mantenere lo schermo acceso. Potrebbe esserci un'API per scopi speciali che fa al caso tuo. Ad esempio, se stai implementando un'interfaccia utente per le chiamate, puoi utilizzare il framework Android Telecom, che mantiene lo schermo attivo quando necessario. Se non esiste un'API per scopi speciali per la tua situazione, puoi utilizzare l'API
- La tua app esegue un servizio in primo piano e devi mantenere attivo il dispositivo quando lo schermo è spento mentre il servizio è in esecuzione?
- Se la risposta è No, non è necessario mantenere il dispositivo attivo. Se l'utente interagisce attivamente con l'app, il dispositivo rimane attivo. Se l'utente non interagisce con la tua app e non stai eseguendo un servizio in primo piano, devi consentire al dispositivo di entrare in modalità sospensione quando necessario. Se devi solo assicurarti che un lavoro venga svolto mentre l'utente non è nell'app, consulta la documentazione relativa alle attività in background per trovare l'opzione migliore.
- Se la risposta è Sì, verifica innanzitutto di dover effettivamente utilizzare un servizio in primo piano. A seconda della situazione, potresti utilizzare un'API con finalità specifiche per soddisfare le tue esigenze anziché un servizio in primo piano.
Puoi trovare informazioni su questi nella documentazione del servizio in primo piano. Ad esempio, se devi monitorare la posizione dell'utente, potresti utilizzare l'API di geofence anziché un servizio in primo piano
location
.
- Sarebbe dannoso per l'esperienza utente se il dispositivo si sospende mentre il servizio in primo piano è in esecuzione e lo schermo del dispositivo è spento? Ad esempio, se utilizzi un servizio in primo piano per aggiornare le notifiche, non sarebbe un'esperienza utente negativa se il dispositivo è in sospensione.
- Se la risposta è No, non utilizzare un wakelock. L'azione riprende automaticamente quando l'utente interagisce con il dispositivo, che viene disattivato.
- Se la risposta è Sì, potresti dover usare un blocco riattivazione. Tuttavia, dovresti comunque controllare se stai già utilizzando un'API o se esegui un'azione che dichiara un blocco di riattivazione per tuo conto, come discusso in Azioni che mantengono il dispositivo attivo.
Azioni che mantengono attivo il dispositivo
Se la tua app esegue una delle seguenti operazioni, non è necessario impostare un blocco di attivazione manualmente. Le seguenti azioni e API mantengono attivo il dispositivo.
- Se stai riproducendo audio, il sistema audio imposta e gestisce un blocco di attivazione per te; non devi farlo tu.
- Se utilizzi API o librerie di pianificazione delle attività come WorkManager,
JobScheduler
oDownloadManager
, il sistema o la libreria acquisisce un blocco di attivazione per tuo conto. - Se utilizzi Media3 ExoPlayer, puoi utilizzare
ExoPlayer.setWakeMode()
per fare in modo che il player imposti un blocco di attivazione per te. - Alcuni sensori del dispositivo sono sensori di risveglio. Puoi utilizzare
SensorManager
per fare in modo che risveglino il dispositivo quando hanno dati da segnalare. Per verificare se un sensore è un sensore di risveglio, chiamaSensor.isWakeUpSensor
.