谈谈android的ipc机制,Android IPC机制(二)

记录一下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

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;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值