Possiedo un IntentService che accoda le chiamate al servizio web da effettuare. Passo un intero come Extra con ogni Intento che definisce il tipo di chiamata al servizio web da effettuare.Cattura degli intenti IntentService prima di onHandleIntent
Vorrei creare una situazione in cui, se un Intento per eseguire un particolare servizio Web viene passato a IntentService e un Intent per quello stesso servizio Web esiste già nella coda IntentService, l'Intento non viene elaborato. Idealmente, butterei via l'Intento, ma potrei anche aggiungere un Extra che consenta al codice di saltare l'Intento una volta che è stato gestito. Con l'arrivo di Intents, potrei tenere traccia di quali sono in coda in qualche oggetto che aggiungo a IntentService.
Tuttavia, non vedo un punto per intercettare l'Intento quando viene passato a IntentService. Per quanto posso dire, posso solo toccarlo quando onHandleIntent viene chiamato e sarebbe troppo tardi.
Qualche idea?
Ho visto questo metodo nella documentazione IntentService, ma non ero abbastanza sicuro quando è stato chiamato. Ho anche notato che non deve essere ignorato. Qualche idea del perché? – Andrew
Fondamentalmente la chiamata interna 'onStartCommand' gestisce probabilmente l'accodamento: se la si sovrascrive e si è sicuri di chiamare effettivamente il metodo della superclasse, DOVREBBE andar bene. – Femi
Sembra funzionare correttamente. Conservo una mappa in cui la chiave è un numero intero che rappresenta il tipo di servizio Web che viene chiamato e il valore è un valore booleano che rappresenta se esiste o meno un intenuto per tale chiamata nella coda. In onStartCommand vedo se l'Intent in arrivo è per una chiamata che esiste già in coda. Se lo fa, aggiungo un extra chiamato "salta" ad esso. In onHandleIntent, controllo "salta" e salta qualsiasi codice, se esiste. Ma prima di lasciare su HandleIntent aggiorno la mappa e imposta il valore per quella chiave su falso. – Andrew