Пользовательский обработчик Parcelable, сообщение не получено

Я хочу разделить объект Handler, чтобы отправить его пакетом из одного действия в службу, чтобы получить некоторую информацию от этой службы.

Прямо сейчас, чтобы проверить это, это простое сообщение. Вот код в 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);

Затем в службе 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();
}

}

Служба получает пользовательский обработчик, но никогда не вызывает метод sendMessage из класса Handler, но действие никогда не получает сообщение...

Для класса MyHandler я в основном использовал код с сайта разработчиков Android и добавьте наследование Handler, а также конструктор.

Что может быть не так?

Заранее спасибо!


person Fernando    schedule 21.11.2014    source источник
comment
используйте класс Messenger, он предназначен для такой работы, как ваша   -  person pskink    schedule 21.11.2014
comment
Да это так, гугл для привязанных сервисов андроид   -  person pskink    schedule 21.11.2014


Ответы (1)


Я предполагаю, что вы хотите, чтобы ваша деятельность связывалась со службой, это может быть ваш выбор:

  1. Используйте ResultReceiver. Пример можно найти здесь< /а>
  2. Пример использования LocalBroadcastReceiver можно найти здесь
  3. Вы можете использовать Binder для привязки вашего сервиса к активности. Пример можно найти здесь
  4. Если вы хотите использовать RPC, вам следует использовать Messanger, пример можно найти здесь и здесь
  5. Для RPC вы также можете использовать файлы AIDL. Пример можно найти здесь и, конечно же, на сайте для разработчиков
person Shubhang Malviya    schedule 21.11.2014
comment
Проголосовали против, это не дает ответа на проблему, а просто список примеров. - person Kristopher Micinski; 21.03.2016
comment
@KristopherMicinski Я ценю, что вы нашли время, чтобы объяснить, почему вы проголосовали против. НО Пытались ли вы понять проблему, с которой столкнулся парень? Если нет, то я бы попросил вас прочитать первый абзац вопроса. В более поздней части он только уточнил, что он делал до сих пор, чтобы найти решение этой проблемы. И, брат, поверь мне, я уже некоторое время участвую в тренировочных группах и юниорах и могу понять, какое решение можно ожидать. Вы можете проголосовать против, позвонить своим друзьям и проголосовать против, что для меня важно, так это то, что у парня наконец-то был ответ!! :) - person Shubhang Malviya; 20.04.2016
comment
Я попытался понять проблему, с которой столкнулся этот парень, и хотя я согласен с тем, что некоторые из них могут решить его проблему, StackOverflow — это место, где можно конкретно и целенаправленно давать ответы на вопросы, а не просто указывать на вещи, которые могут Работа. - person Kristopher Micinski; 20.04.2016
comment
@KristopherMicinski Прежде всего, прочитав ваш ответ, я думаю, что вы несколько задеты моим комментарием, поэтому, пожалуйста, примите мои извинения :), кроме того, я очень ценю и приветствую ваше предложение о том, чтобы отвечать целенаправленно. Но все же в этом случае вы действительно считаете, что я должен решить проблему в коде, а не указывать правильное направление с правильными альтернативами? Спасибо за ваше время :) - person Shubhang Malviya; 22.04.2016
comment
Это также причиняет боль тем из нас, кто приходит из Google, чтобы найти ответ, только для того, чтобы нажать назад и искать другую ссылку *нажимает назад* - person John Doe; 20.03.2021