参考:https://blog.csdn.net/lmj623565791/article/details/47017485
https://blog.csdn.net/u014022205/article/details/49590653
https://blog.csdn.net/qq_25722767/article/details/51921090
1. 直接上代码
bindService 启动服务进程,并在 onBind 方法返回 Messager.getBinder() 返回的 iBinder 句柄。回调 onServiceConnected 方法中获取 message = new message(iBinder),然后读取 message 内的信息。最后调用 message.send(msg) 调用 service 进程的逻辑。
msg.what 对应消息类型
msg.data 对应传递数据,类对象需要继承 parcelable 类
msg.replyTo 参数为一个 message 对象,可以拿着直接 send 产生回调
msg.obj 可以传递任何类型消息,类对象需要继承 parcelable 类
服务端
//男方需要创建一个用来处理(女方)客户端发过来的信息的Handler
private static class MessengerHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MyConstants.MSG_FROM_CLIENT:
//这里只是简单的打印出来
Log.d(MyConstants.TAG_MESSENGER_FOR_IPC, "receive from Client:" + msg.getData().getString("msg"));
break;
default:
super.handleMessage(msg);
}
}
}
//用创建出来的Handler来创建信使
private final Messenger mMessenger = new Messenger(new MessengerHandler());
//通过onBind方法返回给客户端
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
客户端
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = new Messenger(service);
Message msg = Message.obtain(null, MyConstants.MSG_FROM_CLIENT);
Bundle data = new Bundle();
data.putString("msg", "hello ,this is client");
msg.setData(data);
try {
mService.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
//绑定服务
Intent intent = new Intent(this, MessengerService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
可以利用 replyto 产生回调
网友评论