2010-08-23 88 views
1

我一直在想,如果可以使用IntentService來做一些聯網,同時保持未決意圖隊列的優先級。我的目標是能夠在後臺下載一些圖像,如果需要添加更多圖像(發送另一個Intent),並且能夠在必要時重置隊列(最好使用特定的意圖)。這是所有可能的IntentServie,但是當我發送'停止'Intent它需要作爲隊列中的下一個項目進行處理,而不是現在的最後一個。使用IntentService進行優先化聯網

編輯

對於那些有興趣我已經採取了AOSP代碼IntentService,並修改了它滿足我的需求。我不能僅僅繼承IntentHandler的原因是因爲IntentHandler中的私人ServiceHandler類。

裏面的ServiceHandler我有一個新的方法:

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);  
      } 

     } 

這種方法是從onStart,而不只是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); 
    } 

稱爲總體的代碼仍然是有限的,但我能快跟蹤隊列前面的一些消息,這正是我之後的情況。

回答

0

你可以實現/擴展你自己的PriorityQueue,簡單地檢查添加到隊列中的每個新的意圖。如果是停止意圖,它會將其直接移動到線的前端。

+0

PriorityQueue本身就是數據結構,但我需要的是使用PriorityQueue存儲未決意圖的IntentService。如果我要繼承並覆蓋相應的方法,可能是可能的。儘管可以挖掘一些Android的源代碼 – smith324 2010-08-24 05:15:57