从IntentService处理回调的最佳方法是什么

时间:2013-06-28 11:50:26

标签: android web-services callback

我目前正在处理来自Android应用程序的webservice调用。 调用和结果在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的Activity传递了类的实例,就像上面的代码一样:

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,但我不确定。

欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

使用LocalBroadcastManager

或者,使用第三方事件总线,例如OttoEventBus

或者,如果此Web服务调用的结果只会被请求它的活动使用,请切换到由​​保留片段管理的AsyncTask,在这种情况下,您可以更自然地使用UI

或者,如果您需要让用户知道结果,即使您的用户界面不在前台,也请使用ordered broadcast pattern