IntentService – encuentra el número de Intents esperando en la cola
En mi aplicación utilizo un IntentService para hacer algún trabajo. Quiero saber cuántas intenciones están esperando para ser procesadas, ya que IntentService las mantiene en una 'cola de trabajo', y envía la siguiente a onStartCommand()
cuando el onStartCommand
de la anterior ha terminado.
¿Cómo puedo saber cuántos Intents están esperando en esta 'cola de trabajo'?
- El servicio se reinicia al matar el proceso de actividad
- START_STICKY para IntentService
- Ejecutar aplicación en segundo plano cuando el teléfono en Doze
- Servicio AIDL que no se conecta después de bindService ()
- Servicio de fondo con oyente de localización en android
- No se puede obtener el historial del navegador nativo de SAMSUNG S4
- Cómo agregar nuestro propio servicio de sistema en Android Framework?
- ConectividadManager getActiveNetworkInfo excepción de puntero nulo
- Actualizaciones de ubicación de Android en un servicio
- Android: servicio de primer plano frente a wakeLock
- ¿Dónde debería llamarse el servicio android y llamar a GoogleAPIClient mientras se utiliza el patrón MVP en android?
- Uso de un wakelock en un servicio Android 1.5
- Prácticas recomendadas para informar de la ubicación del usuario continuamente
En realidad es bastante fácil: todo lo que necesitas hacer es anular onStartCommand(...)
e incrementar una variable, y decrementarla en onHandleIntent(...)
.
public class MyService extends IntentService { private int waitingIntentCount = 0; public MyService() { super("MyService"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { waitingIntentCount++; return super.onStartCommand(intent, flags, startId); } @Override public void onHandleIntent(Intent intent) { waitingIntentCount--; //do what you need to do, the waitingIntentCount variable contains //the number of waiting intents } }
Solución con SharedPreferences :
Según la documentación , el sistema llama a onHandleIntent(Intent)
cuando el IntentService
recibe una petición de inicio.
Por lo tanto, cada vez que agregue una Intent
a su cola, incrementará y almacenará un número Integer
que representará el número de Intent
en la cola:
public void addIntent(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); int numOfIntents = prefs.getInt("numOfIntents", 0); numOfIntents++; SharedPreferences.Editor edit = prefs.edit(); edit.putInt("numOfIntents",numOfIntents); edit.commit(); }
Entonces, cada vez que onHandleIntent(Intent)
se llama disminuye ese valor Integer
:
public void removeIntent(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); int numOfIntents = prefs.getInt("numOfIntents", 0); numOfIntents--; SharedPreferences.Editor edit = prefs.edit(); edit.putInt("numOfIntents",numOfIntents); edit.commit(); }
Por último, cuando quiera comprobar cuántas Intent
hay en la cola, simplemente obtenga ese valor:
public void checkQueue(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplication()); int numOfIntents = prefs.getInt("numOfIntents",0); Log.d("debug", numOfIntents); }
- Cómo usar el comando rild
- Dependencia no resuelta: com.hanhuy.sbt # android-sdk-plugin; 1.3.19: no encontrado