Scegli l'API giusta per mantenere attivo il dispositivo

Quando l'utente lascia inattivo il dispositivo Android, questo entra rapidamente in modalità 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 mentre è in funzione. In altri casi, l'app non ha bisogno di mantenere lo schermo attivo, ma la CPU deve rimanere attiva.

L'approccio che adotti dipende dalle esigenze della tua app. Tuttavia, una regola generale è che 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.

Scegliere 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.

Diagramma di flusso che riassume come scegliere l'approccio giusto per mantenere attivo il dispositivo. I contenuti del diagramma di flusso sono descritti in dettaglio nel testo seguente.

  • La tua app deve mantenere lo schermo acceso?
    • Se , consulta Mantenere lo schermo acceso. Potrebbe esistere 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 acceso quando necessario. Se non esiste un'API per scopi speciali per la tua situazione, puoi utilizzare l'API keepScreenOn.
  • La tua app esegue un servizio in primo piano e devi mantenere il dispositivo attivo quando lo schermo è spento mentre il servizio è in esecuzione?
    • Se la risposta è No, non è necessario mantenere attivo il dispositivo. Se l'utente interagisce attivamente con l'app, il dispositivo rimane attivo. Se l'utente non interagisce con la tua app e non esegui un servizio in primo piano, devi consentire al dispositivo di entrare in modalità di sospensione quando necessario. Se devi solo assicurarti che alcune attività vengano eseguite mentre l'utente non utilizza l'app, consulta la documentazione relativa alle attività in background per trovare l'opzione migliore.
    • Se , prima conferma di dover utilizzare un servizio in primo piano. A seconda della tua situazione, potrebbero essere disponibili API per scopi speciali che puoi utilizzare 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 Geofencing anziché un servizio in primo piano location.
  • L'esperienza utente sarebbe compromessa se il dispositivo venisse sospeso 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 si tratterebbe di una cattiva esperienza utente se il dispositivo è sospeso.)
    • Se No, non utilizzare un wakelock. L'azione riprende automaticamente quando l'utente interagisce con il dispositivo, che esce dalla sospensione.
    • Se la risposta è , potresti dover utilizzare un wake lock. Tuttavia, devi comunque verificare se stai già utilizzando un'API o eseguendo un'azione che dichiara un wake lock per tuo conto, come descritto in Azioni che mantengono attivo il dispositivo.

Azioni che mantengono attivo il dispositivo

Se la tua app esegue una delle seguenti operazioni, non devi impostare un wake lock manualmente. Le seguenti azioni e API mantengono attivo il dispositivo.

  • Se riproduci audio, il sistema audio imposta e gestisce un wake lock per te, quindi non devi farlo manualmente.
  • Se utilizzi API o librerie di pianificazione delle attività come WorkManager, JobScheduler o DownloadManager, il sistema o la libreria acquisisce un wakelock attribuito alla tua app.
  • Se utilizzi Media3 ExoPlayer, puoi utilizzare ExoPlayer.setWakeMode() per fare in modo che il player imposti un wake lock per te.
  • Alcuni sensori del dispositivo sono sensori di riattivazione; puoi utilizzare SensorManager per fare in modo che questi sensori riattivino il dispositivo quando hanno dati da segnalare. Per controllare se un sensore è un sensore di riattivazione, chiama il numero Sensor.isWakeUpSensor.
  • Se programmi una sveglia, il dispositivo si riattiva quando suona la sveglia, anche se l'app non è in esecuzione.

Vedi anche