2011-09-27 9 views
9

Ho creato un servizio e non ha funzionato come previsto, quindi l'ho debugato. Durante il debug, ho visto che il metodo onDestroy() del servizio viene chiamato direttamente dopo essere ritornato da onCreate(). Quando commento la pulizia che avviene in onDestroy(), il servizio fa il suo lavoro, ma questa non dovrebbe essere la mia soluzione. Quindi la mia domanda è: perché onDestroy() viene chiamato così presto e perché il servizio funziona comunque? O come posso evitare che onDestroy() venga chiamato al momento sbagliato?Service.onDestroy() viene chiamato direttamente dopo la creazione, comunque il servizio fa il suo lavoro

Per vostra informazione: Ho creato una sottoclasse di IntentService.

Grazie per qualsiasi aiuto.

Binabik

+3

Puoi pubblicare una versione ridotta del tuo codice che presenta questo problema? – slayton

+1

Penso che abbiamo bisogno di sapere come è iniziato il servizio e perché non hai appena sottoclasse la classe di servizio. –

risposta

15

Se si sottoclasse IntentService si dovrebbe utilizzare onHandleIntent(Intent intent) per il ciclo di vita del vostro servizio. Il tuo servizio potrebbe spostarsi su onDestroy rapidamente perché non hai il codice all'interno di onHandleIntent. Anche se senza il tuo codice non posso dirlo con certezza.

Inoltre potrebbe spostarsi su onDestroy rapidamente perché IntentService è auto-threaded per te e potrebbe semplicemente avviare il thread di lavoro che chiama onHandleIntent e passare a onDestroy.

+8

Grazie per il vostro aiuto. Ho controllato di nuovo e ora capisco che l'utilizzo di un IntentService era una cattiva idea perché un IntentService si arresta automaticamente dopo essere tornato da onHandleIntent(). Ho anche trovato che nella documentazione: "IntentService fa quanto segue: [...] Arresta il servizio dopo che tutte le richieste di avvio sono state gestite, quindi non devi mai chiamare stopSelf()." Proverò con un servizio "normale". – Binabik

+0

Mi hai salvato la vita :), grazie. – ondermerol

Problemi correlati