1

我一直想知道是否可以使用 anIntentService来做一些网络,同时保持未决意图队列的优先级。我的目标是能够在后台下载一些图像,在需要时添加更多(发送另一个Intent),并在必要时能够重置队列(最好使用特定的 Intent)。这一切都是可能的,IntentServie但是当我发送“停止”Intent时,它需要作为队列中的下一个项目进行处理,而不是现在的最后一个。

编辑

对于那些感兴趣的人,我已经获取了 AOSP 代码IntentService并对其进行了修改以满足我的需要。我不能只继承 IntentHandler 的原因ServiceHandlerIntentHandler.

在里面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);
    }

总体而言,代码仍然有限,但我能够将一些消息快速跟踪到队列的前面,这就是我所追求的。

4

1 回答 1

0

您可以实现/扩展您自己的 PriorityQueue ,它只检查添加到队列中的每个新意图。如果是停止意图,则将其直接移动到线的前面。

于 2010-08-24T01:11:32.353 回答