我一直想知道是否可以使用 anIntentService
来做一些网络,同时保持未决意图队列的优先级。我的目标是能够在后台下载一些图像,在需要时添加更多(发送另一个Intent
),并在必要时能够重置队列(最好使用特定的 Intent)。这一切都是可能的,IntentServie
但是当我发送“停止”Intent
时,它需要作为队列中的下一个项目进行处理,而不是现在的最后一个。
编辑
对于那些感兴趣的人,我已经获取了 AOSP 代码IntentService
并对其进行了修改以满足我的需要。我不能只继承 IntentHandler 的原因ServiceHandler
是IntentHandler
.
在里面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);
}
总体而言,代码仍然有限,但我能够将一些消息快速跟踪到队列的前面,这就是我所追求的。