![](/img/trans.png)
[英]starting BroadcastReceiver or IntentService from non-activity class
[英]How to send data from IntentService to Non-Activity class
我有两个服务类。 一个是WebsocketService(extends Service)
来管理Websocket related function
,一个是SocketMessageProcessing(extends IntentService)
来process response Received in WebSocketService
。 从Non-Activity(SocketImpl)
类我成功地能够将数据发送到WebsocketService
。 但是我在从SocketMessageProcessing
类发送响应回SocketImpl
类时遇到了麻烦。
//Common Class To send data to WebsocketService and Receive response from SocketMessageProcessing Service When Work Done. I am using this class as callback.
public class SocketImpl{
private String json;
private Context mContext;
private WebServiceResponseListener mListener;
public SocketImpl(Context context, String json, WebServiceResponseListener mListener){
//Initilize variables
}
public void execute() {
//Send request to websocket
WebSocketService.sendMessage(mAdapter.getContxet(), json);
}
public void onResponse(String resp, String tag) {
//Here I would like to receive response from IntenService Class.
}
}
//This class will perform Websocket related function and it will send response to SocketMessageProcessing once response received.
public class WebSocketService extends Service {
...
private void processResponse(String message){
Intent intent = new Intent(mContext, SocketMessageProcessing.class);
intent.putExtra("DATA", message);
mContext.startService(intent);
}
}
//Intent service to Process the incoming websocket response, And Send response Back to Class Where Its originate(SocketImpl).
public class SocketMessageProcessing extends IntentService{
@Override
protected void onHandleIntent(Intent intent) {
String json = intent.getStringExtra("DATA");
//Process json and send data back to class from where request originate?
}
}
以下我到目前为止尝试过的事情。
LocalBroadcastManager
因为我想在Non-Activity类中接收响应,所以我不知道如何管理register
并unregister
BroadcastReceiver
。
缓存SocketImpl
对象并在SocketMessageProcessing
获取该对象并尝试调用onResponse()
。 但我确实得到了"sending message to a handler on a dead thread"
异常,所以认为这不是一个好主意。 因为onResponse方法执行许多与UI相关的操作。
任何帮助表示赞赏。 提前致谢!
您建议的选项#1是标准方式。 而且您只需要一个上下文对象即可注册和取消注册
LocalBroadcastManager.getInstance(context).registerReceiver(...
我刚刚在我的应用程序中尝试了非Activity类(使用它需要的活动上下文)并且它工作正常。 我不确定你的意思
我不知道如何管理寄存器并取消注册BroadcastReceiver
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.