簡體   English   中英

如何將數據從IntentService發送到Non-Activity類

[英]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?
    }

}

以下我到目前為止嘗試過的事情。

  1. LocalBroadcastManager
    因為我想在Non-Activity類中接收響應,所以我不知道如何管理registerunregister BroadcastReceiver

  2. 緩存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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM