Java 使用IntentService进行优先网络
我一直在想,是否可以使用Java 使用IntentService进行优先网络,java,android,service,android-intent,priority-queue,Java,Android,Service,Android Intent,Priority Queue,我一直在想,是否可以使用IntentService进行一些联网,同时保持待处理意图队列的优先级。我的目标是能够在后台下载一些图像,在需要时添加更多图像(发送另一个Intent),并能够在必要时重置队列(最好使用特定的Intent)。使用IntentServie时,这一切都是可能的,但当我发送“stop”Intent时,它需要作为队列中的下一个项目进行处理,而不是现在所在的最后一个项目 编辑 对于那些感兴趣的人,我采用了IntentService的AOSP代码,并对其进行了修改以满足我的需要。我不
IntentService
进行一些联网,同时保持待处理意图队列的优先级。我的目标是能够在后台下载一些图像,在需要时添加更多图像(发送另一个Intent
),并能够在必要时重置队列(最好使用特定的Intent)。使用IntentServie
时,这一切都是可能的,但当我发送“stop”Intent
时,它需要作为队列中的下一个项目进行处理,而不是现在所在的最后一个项目
编辑
对于那些感兴趣的人,我采用了IntentService
的AOSP代码,并对其进行了修改以满足我的需要。我不能将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);
}
总的来说,代码仍然有限,但我能够快速跟踪一些消息到队列的前端,这正是我所追求的。您可以实现/扩展自己的PriorityQueue,只需检查添加到队列中的每个新意图。如果是停止意图,它会将其直接移动到行的前面。PriorityQueue本身就是数据结构,但我需要的是IntentService,它使用PriorityQueue存储挂起的意图。如果我将子类化并重写相应的方法,这可能是可能的。是时候仔细研究一下Android的一些源代码了。。。