【发布时间】:2014-11-21 12:34:26
【问题描述】:
我想打包一个 Handler 对象,通过一个 Bundle 将它从一个 Activity 发送到一个服务,以便从该服务获取一些信息。
现在,测试它是一个简单的消息。这是 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);
然后,在 Service onStartCommandMetehod 中,我执行以下操作:
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);
MyHandler 类如下:
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();
}
}
服务接收到自定义处理程序但从来没有但是从类Handler中调用sendMessage方法,但是Activity从来没有接收到消息...
对于 MyHandler 类,我基本上使用了 android developer site 中的代码,并添加了 Handler 继承以及构造函数。
有什么问题?
提前致谢!
【问题讨论】:
-
使用一个 Messenger 类,它是为像你这样的工作而设计的
-
是的,google for "bound services android"
标签: android android-intent parcelable android-handler