记录一下Messenger的使用
服务端
- 创建Messenger对象,传入Handler,在Handler中处理消息
public class MessengerService extends Service {
private static final String TAG = MessengerService.class.getSimpleName();
private final Messenger mMessenger = new Messenger(new MessengerHandler());
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
private static class MessengerHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Constants.MSG_FROM_CLIENT:
String str = "receive msg from Client: " + msg.getData().getString("msg");
Log.i(TAG, str);
Messenger messenger = msg.replyTo;
Bundle bundle = new Bundle();
bundle.putString("reply", "客户1号你好,我是服务器");
msg.what = Constants.MSG_FROM_SERVICE;
msg.setData(bundle);
try {
messenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
}
}
2.注册Service
<service android:name=".messenger.MessengerService"
android:exported="true"/>
客户端
绑定服务端的Service,绑定成功后,根据服务端返回的binder对象创建Messenger对象,并向服务器发送消息。
public class MessengerActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = MessengerActivity.class.getSimpleName();
private TextView textView;
private Button btnConnectService;
private Messenger mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_messenger);
textView = findViewById(R.id.tv_output);
btnConnectService = findViewById(R.id.btnConnectService);
btnConnectService.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnConnectService:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.zxp.ipcserver","com.zxp.ipcserver.messenger.MessengerService"));
bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
break;
}
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG, "11111111111");
mService = new Messenger(service);
Message msg = Message.obtain(null, Constants.MSG_FROM_CLIENT);
Bundle data = new Bundle();
data.putString("msg", "嗨,我是客户1号.");
textView.append("\n SEND:"+"嗨,我是客户1号.");
msg.setData(data);
msg.replyTo = getReplyMessenger;
try {
mService.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
private Messenger getReplyMessenger = new Messenger(new MessengerHandler());
private class MessengerHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case Constants.MSG_FROM_SERVICE:
String str = "receive msg from Service:"+msg.getData().getString("reply");
Log.i(TAG, str);
textView.append("\n RECEIVE:"+msg.getData().getString("reply"));
break;
}
}
}
}