0

現在、Android アプリケーションからの Web サービス呼び出しに取り組んでいます。呼び出しと結果は IntentService 内で処理されます。今のところ、ResultReceiver を拡張したクラス (MyReceiver) を使用しています。

public class ResultReceiverWS extends ResultReceiver {
    private Receiver mReceiver;

    public ResultReceiverWS(Handler handler) {
        super(handler);
    }

    public void setReceiver(Receiver receiver) {
        mReceiver = receiver;
    }

    public interface Receiver {
        public void onReceiveResult(int resultCode, Bundle resultData);
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        if (mReceiver != null) {
            mReceiver.onReceiveResult(resultCode, resultData);
        }
    }
}

MyReceiver.Receiver を実装するアクティビティから、上記のコードのようにバンドル内のクラスのインスタンスを渡します。

MyReceiver receiver = new MyReceiver (new Handler());
receiver.setReceiver(this);
Intent call = new Intent(getApplicationContext(), ClientWS.class);
call.putExtra(RECEIVER, receiver);
call.putExtra(ACTION, MYMETHOD);
startService(call);

問題は、レシーバーがアクティビティ スレッドに接続されていることです。アクティビティが強制終了された場合、(画面を回転させるなどして) 再作成された場合、レシーバーは無人地帯を指します ...

ですから、私の質問は、このケースをどのように処理するかです。BroadcastReceiver について考えましたが、よくわかりません。

どんな提案でも大歓迎です。

4

1 に答える 1

1

を使用しLocalBroadcastManagerます。

または、 OttoEventBusなどのサードパーティのイベント バスを使用します。

または、この Web サービス呼び出しの結果が、それを要求したアクティビティによってのみ使用される場合は、保持されたフラグメントによって管理されるものに切り替えAsyncTaskます。この場合、UI をより自然に操作できます。

または、UI がフォアグラウンドになくてもユーザーに結果を知らせる必要がある場合は、順序付きブロードキャスト パターンを使用します。

于 2013-06-28T11:55:38.137 に答える