Bem-vindo à Visualização do desenvolvedor do Android 12. Envie seu feedback com antecedência e frequência e ajude a deixar o Android 12 ainda melhor.

Restrições de inicialização de serviços em primeiro plano

Ícone de feedback Gostaríamos de receber seu feedback sobre essas restrições. Responda a uma breve pesquisa para dar sua opinião. Mais especificamente, informe quais casos de uso em seu app são afetados por essa mudança.

Os apps destinados ao Android 12 não podem mais iniciar serviços em primeiro plano enquanto são executados em segundo plano, exceto em alguns casos específicos. Se um app tente iniciar um serviço em primeiro plano enquanto estiver em segundo plano e o serviço em primeiro plano não se enquadrar em um dos casos excepcionais, o sistema gerará uma IllegalStateException.

Caso seu app seja afetado por essa mudança, recomendamos que você use o WorkManager. Quando o Android 12 for lançado, o WorkManager se tornará a solução recomendada para iniciar tarefas de maior prioridade em segundo plano.

O Work Manager 2.7.0-alpha01 inclui compatibilidade com jobs acelerados, que são um novo tipo de job no Android 12. No Android 11 ou anterior, essa versão do WorkManager usa serviços em primeiro plano para oferecer compatibilidade com versões anteriores.

Para ver um exemplo completo de como o Work Manager 2.7.0-alpha01 usa jobs acelerados, consulte WorkManagerSample (link em inglês) no GitHub.

Jobs acelerados

Os jobs acelerados, novos no Android 12, permitem que os apps executem tarefas importantes e que o sistema tenha mais controle sobre o acesso a recursos. Esses jobs possuem um conjunto de características que se enquadram entre um serviço em primeiro plano e um job JobScheduler:

  • Eles não são afetados por algumas das restrições de gerenciamento de energia do sistema, incluindo a Economia de bateria e o modo Soneca.
  • O sistema executa esses jobs imediatamente, desde que a carga de trabalho atual permita fazer isso.

Jobs acelerados podem ser adiados

O sistema tenta executar determinado job acelerado o quanto antes após ele ser invocado. No entanto, como acontece com outros tipos de jobs, o sistema poderá adiar a inicialização de novos jobs acelerados se muitos jobs estiverem em execução ou se os recursos do sistema estiverem baixos.

Mais especificamente, o sistema adia a execução de jobs acelerados quando pelo menos uma das seguintes condições ocorre:

  • A carga do sistema está muito alta.
  • A cota limite de jobs acelerados foi excedida. Os jobs acelerados usam um sistema de cotas baseado nos Intervalos do App em espera e limitam o tempo máximo de execução dentro de uma janela de tempo. As cotas usadas para jobs acelerados são mais restritivas do que as usadas para outros tipos de jobs em segundo plano.

Atualizações do WorkManager

A partir do WorkManager 2.7.0-alpha01, seu app pode chamar setExpedited() para declarar que um Worker precisa ser acelerado. Essa nova API usa jobs acelerados ao ser executada no Android 12 e utiliza serviços em primeiro plano em versões anteriores do Android.

Para incentivar os desenvolvedores a agirem de forma intencional ao solicitar trabalhos acelerados nos apps e oferecer melhor compatibilidade com a capacidade de aumentar o tempo de execução de uma tarefa, os métodos CoroutineWorker.setForeground() e ListenableWorker.setForegroundAsync() foram suspensos. Mais especificamente, em dispositivos com o Android 12, a tentativa de chamar ListenableWorker.setForegroundAsync() gera uma IllegalStateException. Em vez disso, é recomendável que os desenvolvedores usem setExpedited().

Casos em que a inicialização de serviços em primeiro plano pelo segundo plano é permitida

O app poderá iniciar serviços em primeiro plano enquanto estiver em segundo plano nas seguintes situações:

A caixa de diálogo pergunta se o usuário quer permitir que o app seja sempre executado em
    segundo plano. A caixa de diálogo tem dois botões: Negar e Permitir.
Figura 1. Caixa de diálogo do sistema avisando ao usuário que a remoção da otimização de bateria pode reduzir a duração da bateria do dispositivo.