Parcelable custom handler, message never received

百般思念 提交于 2020-01-06 13:58:46

问题


I want to parcelable a Handler object to send it by a Bundle from one Activity to a service in order to get some info from this service.

Right now, to test it it's a simple message. Here's the code in the Activity:

private MyHandler mHandlerSharing = new MyHandler() {
    public void handleMessage(Message msg) {
        // this line in the Activity is never reached when debugging
        String data = msg.getData().getString("data");
        Toast.makeText(mContext, data, Toast.LENGTH_SHORT).show();
    }
};

// in some function
mSecureSharing.putExtra(Constants.HANDLER, (Parcelable) mHandlerSharing);

Then, in the Service onStartCommandMetehod I do the following:

    MyHandler myHandler = (MyHandler) intent.getExtras().getParcelable(Constants.HANDLER);
    Message msgObj = myHandler.obtainMessage();
    Bundle b = new Bundle();
    b.putString("data", "SecureSharing running");
    msgObj.setData(b);
    myHandler.sendMessage(msgObj);

The class MyHandler is the following:

import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;

public class MyHandler extends Handler implements Parcelable{
private int mData;

public MyHandler(){
    super();
}

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel out, int flags) {
    out.writeInt(mData);
}

public static final Parcelable.Creator<MyHandler> CREATOR = new Parcelable.Creator<MyHandler>() {
    public MyHandler createFromParcel(Parcel in) {
        return new MyHandler(in);
    }

    public MyHandler[] newArray(int size) {
        return new MyHandler[size];
    }
};

private MyHandler(Parcel in) {
    mData = in.readInt();
}

}

The service receives the custom handler but never but and call sendMessage method from the class Handler, but the Activity never receives the message...

For MyHandler class, I basically used the code from the android developer site and add the Handler inheritance as well as a constructor.

What can be wrong?

Thanks in advance!


回答1:


I assume you want your activity to communicate with service these can be your choices:

  1. Use ResultReceiver an example could be found here
  2. Use LocalBroadcastReceiver example could be found here
  3. You can use Binder to bind your service to activity example could be found here
  4. If you want to use RPC then you should go with Messanger an example could be found here and here
  5. For RPC you can also use AIDL files example could be find here and of course on developer site


来源:https://stackoverflow.com/questions/27061525/parcelable-custom-handler-message-never-received

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!