2011-09-27 15 views
9

Creé un servicio y no funcionó como se esperaba, así que lo depuré. Durante la depuración, vi que el método onDestroy() del servicio se llama directamente después de regresar desde onCreate(). Cuando comento la limpieza que ocurre en onDestroy(), el servicio hace su trabajo, pero esta no debería ser mi solución. Entonces mi pregunta es, ¿por qué onDestroy() se llama tan temprano y por qué el servicio se ejecuta de todos modos? ¿O cómo puedo evitar que onDestroy() se llame en el momento equivocado?Service.onDestroy() se llama directamente después de la creación, de todos modos el servicio hace su trabajo

Para su información: He subclase IntentService.

Gracias por cualquier ayuda.

Binabik

+3

¿Puedes publicar una versión reducida de tu código que muestre este problema? – slayton

+1

Creo que necesitamos saber cómo se inicia el servicio y por qué no solo subclasificó la clase de servicio. –

Respuesta

15

Si está subclassing IntentService usted debe utilizar onHandleIntent(Intent intent) para el ciclo de vida de su servicio. Es posible que su servicio se mueva rápidamente a onDestroy porque no tiene código dentro de onHandleIntent. Aunque sin tu código no puedo decirlo con certeza.

También es posible que se mueva a onDestroy rápidamente porque IntentService tiene un enhebrado automático para usted y puede que simplemente inicie el hilo de trabajo que llama aHandleIntent y se mueve a onDestroy.

+8

Gracias por su ayuda. Lo comprobé nuevamente y ahora entiendo que usar IntentService fue una mala idea porque IntentService se detiene luego de regresar de onLandleIntent(). Incluso encontré que en la documentación: "IntentService hace lo siguiente: [...] Detiene el servicio después de que se hayan manejado todas las solicitudes de inicio, por lo que nunca tendrá que llamar a stopSelf()". Lo intentaré con un Servicio "normal". – Binabik

+0

Salvaste mi vida :), gracias. – ondermerol

Cuestiones relacionadas