【问题标题】:Parcelable custom handler, message never receivedParcelable 自定义处理程序,消息从未收到
【发布时间】: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


【解决方案1】:

我假设您希望您的活动与服务进行通信,这些可以是您的选择:

  1. 使用 ResultReceiver 可以找到一个例子here
  2. 可以找到使用LocalBroadcastReceiver的例子here
  3. 您可以使用 Binder 将您的服务绑定到活动示例可以找到here
  4. 如果你想使用 RPC 那么你应该使用 Messanger 可以找到一个例子 herehere
  5. 对于 RPC,您还可以使用 AIDL 文件,例如可以在 here 找到,当然也可以在 developer site 找到

【讨论】:

  • 投反对票,这并没有给出问题的答案,只是一个例子的洗衣清单。
  • @KristopherMicinski 感谢您抽出宝贵时间解释您投反对票的原因。但是您是否尝试过了解这个人遇到的问题?如果不是,那么我会要求您阅读问题的第一段。在后面的部分中,他只详细说明了他到目前为止为解决该问题所做的工作。兄弟,相信我,我已经参与了一段时间的培训组和初级培训,并且可以收集到人们期望什么样的解决方案。您可以投反对票并打电话给您的朋友并投反对票,对我来说重要的是这个家伙终于有了答案! :)
  • 我“试图了解这个人遇到的问题”,虽然我同意其中一些可以解决他的问题,但 StackOverflow 是一个提供具体和有针对性的问题答案的地方方式,而不仅仅是提供可能有用的东西的指针。
  • @KristopherMicinski 首先,通过阅读您的回复,我认为您对我的评论有些伤害,所以请接受我的道歉:),此外,我非常感谢并欢迎您提出有针对性地回答的建议.但是在这种情况下,你真的觉得我应该用代码解决问题,而不是用正确的替代方案指向正确的方向吗?谢谢你的时间:)
  • 这也伤害了我们这些来自谷歌寻找答案的人,只需要按回并寻找另一个链接*按回*
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2011-05-06
  • 2019-06-29
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多