Neste artigo, falaremos sobre um problema com o JobIntentService, sobre o qual existem muitas perguntas sobre os recursos e relatórios correspondentes no rastreador de erros do Google. E também sobre o motivo pelo qual, a julgar por tudo, o Google não considera um bug e fecha esses relatórios.
1. Introdução
JobIntentServices foram criados para o trabalho em segundo plano. Eles foram amplamente utilizados no Android 8 e superior, quando a capacidade de usar serviços em segundo plano desapareceu.
De fato, eles substituem os serviços em segundo plano e também estão sob o controle do agendador de tarefas (JobScheduler).
Assim, o sistema tem a capacidade de controlar o progresso das tarefas em segundo plano e também controla os próprios wakelocks, o que possibilitou otimizar o consumo de bateria do dispositivo e evitar o uso incorreto de wakelocks pelos desenvolvedores. Essas etapas permitiram minimizar situações em que o dispositivo não pode entrar no modo de suspensão (modo de pausa), o que afeta novamente a economia de bateria.
Brevemente sobre JobIntentService
Em essência, JobIntentService é o mesmo IntentService sob o controle do Agendador de Tarefas (JobScheduler).
Executando no thread de segundo plano do AsyncTask.
Nas versões do Android 4.4 e abaixo, o IntentService usual é usado.
Uma descrição detalhada pode ser encontrada na documentação.
Ciclo de vida e armadilhas
Ambos os tipos de tarefas têm o mesmo ciclo de vida. As tarefas são controladas pelo manipulador e têm estados.
Embora esses estados não sejam acessíveis externamente, sob certas circunstâncias, o sistema lança exceções nas quais o aplicativo falha. Esses comportamentos são um problema e uma dor de cabeça para muitos desenvolvedores e, infelizmente, não têm uma solução simples. Para começar, estudamos o status e o ciclo de vida das tarefas e, em seguida, consideramos possíveis soluções.
Sequência de estado da tarefa

BINDING - tempo limite do estado de criação da tarefa (ligação de serviço) 18 segundos.
INÍCIO - estado de início da tarefa, tempo limite de 8 segundos.
EXECUTANDO - estado de execução da tarefa, tempo limite de 10 minutos.
STOPPING - estado de parada da tarefa (por exemplo, após chamar cancel ()), tempo limite de 8 segundos.
CONCLUÍDO - o estado final da tarefa concluída, o último estado no ciclo de vida da tarefa.
Diagrama simplificado do ciclo de vida da tarefa

Cada estado da tarefa tem seu próprio tempo limite. Após um tempo limite, a tarefa é interrompida, independentemente de seu status. Na verdade, este é um mecanismo de tempo limite e é uma armadilha desde após o tempo limite, o sistema lança uma exceção do tipo java.lang.SecurityException
e o aplicativo trava com a seguinte mensagem O Caller no longer running, last stopped +1s600ms because: timed out while starting
onde +1s600ms
é o tempo decorrido desde o tempo limite no momento em que a exceção foi lançada e o "motivo" ( because: timed out while starting
) indica em que estado estava a tarefa quando o tempo limite expirou.
Conclusões
Como mostra a experiência, essas exceções são encontradas em aplicativos bastante carregados.
Para apoiar esse problema, você pode observar os dispositivos fracos e superiores. Esse problema também é indicado por exceções lançadas com mensagens de tempo limite. Consequentemente, a decisão sobre descarregar o aplicativo e otimizar o uso do JobIntentServices sugere-se, por exemplo, para evitar situações em que vários JobIntentServices são iniciados em paralelo. A segunda solução, em alguns casos mais trivial e às vezes mais complicada do que a primeira opção, é usar o JobService.
Além disso, se você pesquisar esse problema no Google, poderá encontrar outras opções "duvidosas" para resolver esse problema, por exemplo, poderá ver os seguintes links:
Opção 1
Opção 2
Opção 3
PS
No momento, o Google está preparando um bom substituto para JobService e JobIntentService - este é o Worker e o WorkManger do pacote androidx.work.
Infelizmente, essas ferramentas ainda não estão prontas para produção e possuem vários bugs, mas agora, como os testes demonstraram, resolvem o problema descrito acima.