IntentService
保留中のインテントのキューに優先順位を付けたまま、を使用してネットワーキングを行うことが可能かどうか疑問に思っていました。バックグラウンドでいくつかの画像をダウンロードし、必要に応じてさらに追加し(別の画像を送信し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);
}
全体的にコードはまだ制限されていますが、キューの先頭にあるメッセージをすばやく追跡することができます。これはとにかく私が求めていたものです。