Escolher a API certa para manter o dispositivo ativado

Quando o usuário deixa o dispositivo Android ocioso, ele entra rapidamente no estado de suspensão para evitar o descarregamento da bateria. No entanto, há momentos em que um app precisa impedir que a CPU entre no estado de suspensão. Em alguns casos, o app pode precisar manter a tela ligada enquanto está funcionando. Em outros casos, o app não precisa manter a tela ligada, mas ainda precisa que a CPU esteja ativa.

O método escolhido depende das necessidades do app. No entanto, uma regra geral é usar a abordagem mais leve possível para minimizar o impacto nos recursos do sistema. Este documento ajuda você a escolher a tecnologia Android correta para sua situação.

Escolher a tecnologia certa

A melhor opção para manter o dispositivo ativo depende das necessidades do seu app. Esta seção ajuda você a escolher a abordagem certa.

Fluxograma que resume como escolher a abordagem certa para manter o dispositivo ativado. O conteúdo do fluxograma é explicado no texto a seguir.

  • O app precisa manter a tela ligada?
    • Se a resposta for Sim, consulte Manter a tela ativada. Pode haver uma API de propósito especial que faça o que você precisa. Por exemplo, se você estiver implementando uma interface de chamada telefônica, use o framework de telecomunicações do Android, que mantém a tela ligada quando necessário. Se não houver uma API de propósito especial para sua situação, use a API keepScreenOn.
  • Seu app está executando um serviço em primeiro plano, e você precisa manter o dispositivo ativo com a tela desligada enquanto o serviço está em execução?
    • Se a resposta for Não, não é necessário manter o dispositivo ativo. Se o usuário estiver interagindo ativamente com o app, o dispositivo vai permanecer ativo. Se o usuário não estiver interagindo com o app e você não estiver executando um serviço em primeiro plano, deixe o dispositivo entrar no modo de suspensão quando necessário. Se você só precisa garantir que algum trabalho seja feito enquanto o usuário está longe do app, consulte a documentação sobre tarefas em segundo plano para encontrar a melhor opção.
    • Se a resposta for Sim, primeiro confirme se você realmente precisa usar um serviço em primeiro plano. Dependendo da sua situação, talvez haja uma API de finalidade especial que você possa usar para atender à sua necessidade em vez de um serviço em primeiro plano. Você pode encontrar informações sobre eles na documentação do serviço em primeiro plano. Por exemplo, se você precisar rastrear a localização do usuário, poderá usar a API Geofencing em vez de um serviço em primeiro plano location.
  • Isso prejudicaria a experiência do usuário se o dispositivo fosse suspenso enquanto o serviço em primeiro plano estivesse em execução e a tela do dispositivo estivesse desligada? Por exemplo, se você estiver usando um serviço em primeiro plano para atualizar notificações, não será uma má experiência do usuário se o dispositivo for suspenso.
    • Se a resposta for Não, não use um wake lock. A ação é retomada automaticamente quando o usuário interage com o dispositivo, o que o tira do estado de suspensão.
    • Se a resposta for Sim, talvez seja necessário usar um wake lock. No entanto, verifique se você já está usando uma API ou fazendo uma ação que declara um wake lock em seu nome, conforme discutido em Ações que mantêm o dispositivo ativo.

Ações que mantêm o dispositivo ativado

Se o app estiver fazendo alguma das ações a seguir, não será necessário definir um wake lock manualmente. As ações e APIs a seguir mantêm o dispositivo ativo para você.

  • Se você estiver reproduzindo áudio, o sistema de áudio vai definir e gerenciar um bloqueio de despertar para você. Não é necessário fazer isso por conta própria.
  • Se você estiver usando APIs ou bibliotecas de programação de tarefas, como WorkManager, JobScheduler ou DownloadManager, o sistema ou a biblioteca vai adquirir um wake lock atribuído ao seu app.
  • Se você estiver usando o ExoPlayer da Media3, use ExoPlayer.setWakeMode() para que o player defina um bloqueio de despertar para você.
  • Alguns sensores de dispositivos são sensores de ativação. Use SensorManager para que esses sensores ativem o dispositivo quando tiverem dados para informar. Para verificar se um sensor é de despertar, chame Sensor.isWakeUpSensor.
  • Se você programar um alarme, o dispositivo vai despertar quando ele tocar, mesmo que o app não esteja em execução.

Veja também