Мне было интересно, можно ли использовать IntentService
для создания сетей, сохраняя приоритет очередей ожидающих намерений.Моя цель - иметь возможность загружать некоторые изображения в фоновом режиме, добавлять больше при необходимости (отправить еще Intent
) и иметь возможность сбрасывать очередь при необходимости (желательно с определенным намерением).Это все возможно с IntentServie
, но когда я отправляю этот «стоп» Intent
, он должен обрабатываться как следующий элемент в очереди, а не как последний, где он сейчас находится.
EDIT
Для тех, кто заинтересован, я взял код 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);
}
}
Thisметод вызывается из 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);
}
В целом код по-прежнему ограничен, но я могу быстро отследить некоторые сообщения в начале очереди, что и было послев любом случае.