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'?

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 mantener la escucha de notificaciones push en Android en segundo plano
  • WakeLock finalizó mientras seguía teniendo error aunque lo estoy lanzando
  • Android - Firebase jobdispatcher
  • Tomar la foto de la cámara sin vista previa
  • START_STICKY no funciona en Android KitKat
  • OnHandleIntent () no se llama en IntentService
  • Cómo utilizar HdmiControlService
  • ¿Cómo obtengo el nombre de una clase de servicio en Android?
  • Android cómo encontrar la llamada saliente ha sido atendida
  • ¿Cómo detener un servicio de Android SOLAMENTE cuando no hay otras actividades en mi aplicación en ejecución?
  • Suprimir notificaciones de un servicio si la actividad se está ejecutando
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.