1

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);
    }

全体的にコードはまだ制限されていますが、キューの先頭にあるメッセージをすばやく追跡することができます。これはとにかく私が求めていたものです。

4

1 に答える 1

0

キューに追加されたすべての新しいインテントをチェックするだけの独自のPriorityQueueを実装/拡張できます。それがストップインテントである場合、それはラインの前にまっすぐに移動します。

于 2010-08-24T01:11:32.353 に答える