O Android 10 (nível de API 29) e versões posteriores aplicam restrições sobre o momento em que os aplicativos podem iniciar atividades quando estão operando em segundo plano. Essas restrições ajudam a minimizar as interrupções para os usuários, além de mantê-los com maior controle sobre o que é exibido na tela.
Este guia apresenta as notificações como uma alternativa para iniciar atividades em segundo plano. Assim, aqui estão listados os casos específicos em que a restrição não se aplica.
Exibir notificações
Em quase todos os casos, os aplicativos em segundo plano exibem notificações com limite de tempo para fornecer informações urgentes ao usuário, em vez de iniciar uma atividade diretamente. Exemplos de quando usar essas notificações incluem o processamento de uma chamada telefônica recebida ou um despertador ativo.
Esse sistema de lembrete e alerta com base em notificação oferece várias vantagens para os usuários:
- Ao utilizar o dispositivo, o usuário vê uma notificação de informações básicas. Assim, ele é capaz de responder à solicitação, além de manter o contexto atual e ter controle sobre o que é exibido na tela.
- As notificações com limite de tempo respeitam as regras Não perturbe do usuário. Por exemplo, quando o Não perturbe está ativado, os usuários podem permitir chamadas somente de contatos específicos ou de quem já tenha ligado anteriormente.
- Quando a tela do dispositivo está desligada, o intent em tela cheia é iniciado automaticamente.
- Na tela de Configurações do dispositivo, o usuário pode ver quais aplicativos enviaram notificações recentemente, inclusive de canais de notificação específicos. Nessa tela, ele pode controlar as preferências de notificação.
Exceções à restrição
Os aplicativos que operam no Android 10 ou em versões posteriores podem iniciar atividades somente em uma ou mais das seguintes condições:
- O aplicativo tem uma janela visível, como uma atividade em primeiro plano.
- O aplicativo tem uma atividade na pilha de retorno da tarefa em primeiro plano.
O aplicativo tem uma atividade na pilha de retorno de uma tarefa existente na tela Recentes.
O aplicativo tem uma atividade que foi iniciada recentemente.
O aplicativo chamou o
finish()
em uma atividade muito recentemente. Isso se aplica somente quando o aplicativo tinha uma atividade em primeiro plano ou na pilha de retorno da tarefa em primeiro plano no momento em que ofinish()
foi chamado.O aplicativo tem um serviço vinculado pelo sistema. Essa condição se aplica somente para os serviços a seguir, que podem precisar iniciar uma IU:
AccessibilityService
,AutofillService
,CallRedirectionService
,HostApduService
,InCallService
,TileService
,VoiceInteractionService
eVrListenerService
.O aplicativo tem um serviço vinculado por um aplicativo visível diferente. Para iniciar as atividades corretamente, o aplicativo vinculado ao serviço precisa permanecer visível para o aplicativo em segundo plano.
O aplicativo recebe uma notificação
PendingIntent
do sistema. No caso de intents pendentes para broadcast receivers e serviços, o aplicativo pode iniciar as atividades por alguns segundos após o envio do intent pendente.O aplicativo recebe um
PendingIntent
enviado de um aplicativo visível diferente.O aplicativo recebe uma transmissão de sistema em que é esperado que ele inicie uma IU. Alguns exemplos são
ACTION_NEW_OUTGOING_CALL
eSECRET_CODE_ACTION
. O aplicativo pode iniciar atividades por alguns segundos após o envio da transmissão.O aplicativo está associado a um dispositivo de hardware complementar por meio da API
CompanionDeviceManager
. Essa API permite que o aplicativo inicie atividades em resposta a ações realizadas pelo usuário em um dispositivo pareado.O aplicativo é um controlador de políticas do dispositivo que opera no modo de proprietário do dispositivo. Exemplos de casos de uso incluem dispositivos empresariais completamente gerenciados e dispositivos dedicados, como quiosques e sinalização digital.
O usuário concedeu a permissão
SYSTEM_ALERT_WINDOW
ao aplicativo.