2010-08-23 2 views
1

Je me demandais s'il était possible d'utiliser un IntentService pour faire du réseautage tout en conservant la priorité des intentions en attente. Mon objectif est de pouvoir télécharger des images en arrière-plan, en ajouter d'autres si nécessaire (envoyer un autre Intent) et pouvoir réinitialiser la file d'attente si nécessaire (de préférence en utilisant une intention spécifique). C'est tout possible avec un IntentServie mais quand j'envoie ce 'stop' Intent il doit être traité comme le prochain élément dans la file d'attente, pas le dernier où il est maintenant.Utilisation d'un IntentService pour effectuer la mise en réseau prioritaire

EDIT

Pour les personnes intéressées j'ai pris le code PSBA pour IntentService et modifié pour répondre à mes besoins. La raison pour laquelle je ne peux pas simplement sous-classer IntentHandler est à cause de la classe privée ServiceHandler à l'intérieur de IntentHandler.

A l'intérieur du ServiceHandler J'ai une nouvelle méthode:

public final boolean sendPriorityMessage(Message msg) 
     { 
      int priority = msg.arg2; 
      //Log.i(GenericList.TAG,"recieved message priority: "+priority); 


      if(priority>PRIORITY_NORMAL){ 
       return sendMessageAtFrontOfQueue(msg); 
      }else{ 
       return sendMessage(msg);  
      } 

     } 

Cette méthode est appelée à partir onStart au lieu de simplement sendMessage

@Override 
    public void onStart(Intent intent, int startId) { 
     Message msg = mServiceHandler.obtainMessage(); 
     msg.arg1 = startId; 
     msg.obj = intent; 
     try{ 
      msg.arg2 = intent.getExtras().getInt(KEY_PRIORITY); 
     }catch(Exception e){ 
      msg.arg2 = PRIORITY_NORMAL; 
     } 

     mServiceHandler.sendPriorityMessage(msg); 
    } 

Globalement, le code est encore limité, mais je suis en mesure de jeûner suivre quelques messages à l'avant de la file d'attente, qui est ce que j'étais après tout de toute façon.

Répondre

0

Vous pouvez implémenter/étendre votre propre PriorityQueue qui vérifie simplement chaque nouvelle intention ajoutée à la file d'attente. Si c'est l'intention d'arrêt, elle le déplace directement au début de la ligne.

+0

La PriorityQueue en elle-même est juste la structure de données, ce dont j'ai besoin est IntentService qui utilise une PriorityQueue pour stocker les intentions en attente. Cela pourrait être possible si je devais sous-classer et remplacer les méthodes correspondantes. Il est temps de creuser à travers le code source d'Android ... – smith324

Questions connexes