¿Hay alguna otra razón por la que el Intent que se pasa onStartCommand(Intent, int, int)
sea NULL además de que el sistema reinicie el servicio a través de una bandera como START_STICKY
?
Además, cuando el sistema reinicia el servicio, el Intent.getAction()
método devuelve NULL ... a veces. La intención no es NULL sologetAction()
También pregunté aquí, pero todavía no he recibido una respuesta.
ACTUALIZACIÓN : Después de conversar con Mark Murphy, sugirió que regresara START_REDELIVER_INTENT
en la onStartCommand()
devolución de llamada en mi servicio en lugar de START_STICKY
enviar la intención completa después de un reinicio.
No hice esto inicialmente porque me preocupaba que si el servicio intentaba hacer algo, en medio de ese algo, el servicio se reiniciaba ... ¿reconocerá que comenzó a hacer ese algo? Supongo que esa es la lógica de la que tendré que ser responsable :)
intent
esnull
elonStartCommand()
, que es causado por algún otro error que es visible en LogCat antes de esto. No sé por qué, pero esto es lo que observé y es bastante fácil pasarlo por alto.NullPointerException
en algún lugar de una de las Actividades. Más tarde fue algún otro error. Pero en ambos casos, mi seguimiento de pila mostró que mi servicio, que se estaba ejecutando mientras ocurría este error,intent
eranull
como en su caso. Estuve pensando durante bastante tiempo en lo que estaba mal, cuando decidí desplazarme hacia arriba en el seguimiento de la pila y parecía que en algún lugar de la parte superior tenía mi verdadero error. Después de resolver este, tambiénnull
intent
desapareció el que tenía .Respuestas:
Me sorprende que no haya discusión sobre las banderas entrantes. Voy a monitorear esto en los registros con lo siguiente:
Actualización: las banderas eran 0, por lo que no había nada procesable allí. Dejé el cheque nulo allí sin pérdida de función.
Editar: Ok, lo encontré en la documentación de START_STICKY de todos los lugares. "Si no hay ningún comando de inicio pendiente para entregar al servicio, se llamará con un objeto de intención nula, por lo que debe tener cuidado de verificar esto".
http://developer.android.com/reference/android/app/Service.html
fuente
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Trabajó para mi. Pero, por supuesto, debe manejar correctamente la intención nula.But then of course you need to correctly handle null intent
; ¡¿Qué quieres decir?! ¿Cómo? Gracias.onStartCommand(intent: Intent?, ...)
debería funcionar. Y luego simplemente no lo haga,intent!!
pero verifique correctamente si la intención es nula.