Existe algum outro motivo para que o Intent passado onStartCommand(Intent, int, int)
seja NULL, além de o sistema reiniciar o serviço por meio de um sinalizador como START_STICKY
?
Além disso, quando o serviço é reiniciado pelo sistema, o Intent.getAction()
método retorna NULL ... às vezes. Intent não é NULL, apenasgetAction()
Eu perguntei aqui também, mas ainda não recebi uma resposta.
ATUALIZAÇÃO : depois de conversar com Mark Murphy, ele sugeriu que eu retornasse START_REDELIVER_INTENT
no onStartCommand()
retorno de chamada em meu serviço em vez de START_STICKY
para que todo o intent fosse enviado após uma reinicialização.
Não fiz isso inicialmente porque estava preocupado com o fato de que, se o serviço estava tentando fazer algo, no meio de algo o serviço foi reiniciado ... ele reconhecerá que começou a fazer isso? Acho que é lógico que terei de ser responsável :)
intent
estánull
ligadoonStartCommand()
, é causado por algum outro erro que era visível no LogCat antes disso. Não sei por quê, mas foi o que observei e é muito fácil passar por alto.NullPointerException
em algum lugar em uma das Atividades. Mais tarde, foi algum outro erro. Mas em ambos os casos, meu rastreamento de pilha mostrou que meu serviço - que estava em execução enquanto esse erro ocorreu -intent
eranull
como no seu caso. Eu estive pensando por um longo tempo o que há de errado, quando decidi rolar o rastreamento da pilha e parecia que em algum lugar no topo eu tinha meu verdadeiro erro. Depois de resolver este, também aquele comnull
intent
desapareceu.Respostas:
Estou surpreso que não haja discussão sobre as bandeiras de entrada. Vou monitorar isso nos registros com o seguinte:
Atualização: os sinalizadores eram 0, então não havia nada acionável lá. Deixei o cheque nulo sem perda de função.
Edit: Ok, encontrei na documentação do START_STICKY de todos os lugares! "se não houver nenhum comando de início pendente a ser entregue ao serviço, ele será chamado com um objeto de intenção nulo, portanto, você deve ter cuidado para verificar isso."
http://developer.android.com/reference/android/app/Service.html
fonte
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Funcionou para mim. Mas então, é claro, você precisa lidar corretamente com a intenção nula.But then of course you need to correctly handle null intent
; O que você quer dizer?! Quão? Obrigado.onStartCommand(intent: Intent?, ...)
ele deve funcionar. E então não faça,intent!!
mas verifique corretamente se a intenção é nula.