2012-10-14 8 views
6

Ho due esempi di Intentservice. Uno è l'esempio di download nel manuale di Commonsware. l'altro è a http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler. Entrambi questi esempi mostrano il servizio che esegue un'attività finita e entrambi apparentemente si distruggono eseguendo fino alla fine dell'ambito dell'evento onHandleIntent.come mantenere attivo un servizio Intent

Il servizio che sto scrivendo deve avere eventi e ascoltare le cose. Uno è un LocationListener che ascolta il movimento GPS. Un altro rende i post su un servizio REST e ascolta le risposte. Voglio che venga eseguito fino a quando non è trascorso un tempo o fino a quando non è stato detto di uscire dall'attività che l'ha avviato.

Come posso mantenerlo in esecuzione? Dove, ad esempio, metto la mia implementazione di LocationListener? Grazie, Gary

+0

anche io ho bisogno di una risposta alla stessa domanda, nel mio caso sto iniziando una torcia dal widget, ma viene ucciso. – user2548816

risposta

13

Come faccio a mantenere in esecuzione?

Non è così. IntentService è progettato per eseguire un lavoro (o forse un po 'fuori dalla coda, se i comandi arrivano rapidamente), quindi arrestare.

Il servizio che sto scrivendo deve avere eventi e ascoltare le cose.

Quindi non si dovrebbe usare uno IntentService. Utilizzare un normale Service, con i propri thread in background secondo necessità.

+2

Qualcuno può qualificare questa risposta? IntentService è una sottoclasse di Service, quindi perché dovrebbe essere utilizzato solo quest'ultimo (in una nuova discussione) per operazioni a lungo termine/in corso? –

+0

@ ban-geoengineering: Come ho scritto, 'IntentService' è stato progettato intorno alle operazioni transazionali, dove il lavoro è svolto abbastanza velocemente e il servizio dovrebbe quindi spegnersi. Se vuoi qualcosa che funzioni più a lungo, crea il tuo 'Servizio' con i tuoi controlli per quando il' Servizio' si arresta (o viene fermato da un client tramite 'stopService()'). – CommonsWare

+0

Capisco cosa hai detto, ma mi piacerebbe sapere da dove hai preso queste informazioni, così posso verificare da solo che è proprio così. –

-1

È possibile raggiungere questo obiettivo in due modi,

AlarmManager è di Android-Buita classe che consente di eseguire determinate azioni su particolare tempo peroidale.

TimerTask fa la stessa cosa di AlarmManager, è possibile ripetere determinate azioni del codice ancora e ancora.

Tuttavia AlarmManager è più leggero nell'esecuzione quindi suggerisco di andare con la classe AlarmManager.

Creare un AlarmManager che preleva le coordinate GPS e le invia al server a intervalli regolari.

Dai un'occhiata a questo AlarmManager Example.

+0

Nessuno dei tuoi suggerimenti impedirà la distruzione di IntentService. Non puoi tenerlo in vita, senza aspettare nel metodo handleIntent. – bluewhile

+0

@bluewhile Penso che Lucifer stia fondamentalmente fornendo un'alternativa all'utilizzo di IntentService per questa particolare attività. – AnixPasBesoin

-1

Per mantenere attivo un servizio, il servizio deve restituire START_STICKY nel metodo di servizio onStartCommand().

Con questo, il servizio verrà eseguito anche se si esce dalla propria attività.

Nota: L'Android uccide ancora servizi dopo qualche tempo (30 mintus a 1 ora), se non sono servizi di primo piano. Utilizzare startForeground(notification) per renderlo in primo piano.

buona fortuna

+2

Questo non spiega come eseguire IntenService a tempo indeterminato. –

Problemi correlati