Android 如何更好地处理从服务到片段的处理程序消息?

Android 如何更好地处理从服务到片段的处理程序消息?,android,android-fragments,android-service,android-handler,Android,Android Fragments,Android Service,Android Handler,对于从启动的服务到片段的通信,我是这样做的: 在服务机构中 Handler handler; public synchronized void setHandler(Handler h) { handler = h; } protected synchronized void sendMessage(int arg1) { Message m = handler.obtainMessage(); m.arg1=arg1; handler.sendMe

对于从启动的服务到片段的通信,我是这样做的:

在服务机构中

    Handler handler;


public synchronized void setHandler(Handler h)
{
    handler = h;
}

protected synchronized void sendMessage(int arg1)
{
    Message m = handler.obtainMessage();
    m.arg1=arg1;
    handler.sendMessage(m);
}
在片段中:

@Override
    public void onServiceConnected(ComponentName name, IBinder service) {

        LocalBinder binder = (LocalBinder) service;
        mService = ("service_name") binder.getService();
        mService.setHandler(serviceHandler);


    }
以及:

在onDestroy中,我是这样做的:

现在在fragment的ondestroy中,我执行以下操作:

if (mIsBound) {
                // Detach our existing connection.
                App.getAppContext().unbindService(mConnection);
                mIsBound = false;
            }
用于绑定和解除绑定服务的函数:

void doBindService() {

    Appbike.getAppContext().bindService(new Intent(getActivity(), Bike_ble_service.class), mConnection,Context.BIND_AUTO_CREATE);
    mIsBound = true;

}

/**
 * Detach our existing connection
 */
void doUnbindService() {
    if (mIsBound) {
        Appbike.getAppContext().unbindService(mConnection);
        mIsBound = false;
    }
}
@Override
public IBinder onBind(Intent intent) {
    iHaveToSendMsg = true;
    return mBinder;
}

@Override
    public boolean onUnbind(Intent intent)
    {
        iHaveToSendMsg = false;
        return true;
    }
edit2:现在在我使用的服务中

public class LocalBinder extends Binder {
        LocalService getService() {
            // Return this instance of LocalService so clients can call public methods
            return LocalService.this;
        }
    }
 @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
在片段中,我可以通过活页夹调用服务函数

如何解决我的问题?如果我取消绑定服务,来自服务的消息将继续到达

我必须改变一切吗

解决方案:我尝试在服务中这样做:

void doBindService() {

    Appbike.getAppContext().bindService(new Intent(getActivity(), Bike_ble_service.class), mConnection,Context.BIND_AUTO_CREATE);
    mIsBound = true;

}

/**
 * Detach our existing connection
 */
void doUnbindService() {
    if (mIsBound) {
        Appbike.getAppContext().unbindService(mConnection);
        mIsBound = false;
    }
}
@Override
public IBinder onBind(Intent intent) {
    iHaveToSendMsg = true;
    return mBinder;
}

@Override
    public boolean onUnbind(Intent intent)
    {
        iHaveToSendMsg = false;
        return true;
    }
在sendmessage中,我检查标志,如果它为false,我不发送消息。有可能的解决办法吗

我的解决方案的问题:“在我的解决方案中,有一个问题…Onbind并不是每次我执行bindService时都调用的:/我能做什么? 我无法重写所有代码并使用回调,因为这一次我必须使用处理程序消息

可能的解决方案:我可以在setHandler()函数中设置标志吗


在onStop或onPause中注销您的客户端并在onStart/OnResume中注册为什么要使用消息?您有本地绑定服务,对吗?所以使用“本地绑定服务”模式不,不使用Messenger,请参阅,然后只使用简单的回调为什么每次客户端绑定时都要调用它?