Service(二)使用Messenger
来源:互联网 发布:淘宝机器人自动回复 编辑:程序博客网 时间:2024/06/06 11:38
Messenger是信使的意思,将Messenger用于Service可以实现不同进程间的通信(IPC)
来看一下Messenger在此用到的主要方法:
1、构造方法 Messenger(Handler handler),其中的handler用于处理消息
2、Messenger.getBinder()返回一个Binder对象
3、Message.replyTo,这是message的一个成员变量,它可以指明一个Messenger对象,Messenger就像要飞往特定地方送信的信鸽,Message的replyTo指明了它要去的方向
4、Messenger.send(Message)发送信息
先来编写服务器端的代码,先写一个MyService(继承Service),里面有两个Messenger,一个用于收信一个用于送信
Messenger send_messenger;
Messenger receive_messenger = new Messenger(new Handler() {public void handleMessage(Message msg) { Bundle data = msg.getData(); String s = data.getString("message"); Toast.makeText(getApplicationContext(), "收到来自客户端的消息:"+s, Toast.LENGTH_SHORT).show(); send_messenger = msg.replyTo; if(demo_1_messenger!=null) { Message m = Message.obtain(); Bundle bundle = new Bundle(); bundle.putString("message", "你好呀,刚刚接收到了你的消息:"+s+"\n我觉得我有必要回复你一下,这样显得我比较有礼貌嘿!"); m.setData(bundle); try {demo_1_messenger.send(m);} catch (RemoteException e) {e.printStackTrace();} } }}重写onBind方法:
@Overridepublic IBinder onBind(Intent arg0) { return receive_messenger.getBinder();}
第二步:写客户端代码,客户端中也是有两个Messenger,一个用于收信一个用于送信
Messenger receiveMessenger = new Messenger(new Handler() {public void handleMessage(Message msg) {String s = msg.getData().getString("message");};});然后可以把接收到的信息显示出来(略)
跟用IBinder实现一样,还是需要有一个ServiceConnection对象
ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName arg0, IBinder arg1) {// TODO Auto-generated method stubreceiveMessenger = new Messenger(arg1);}};
这里把IBinder类转换成了Messenger类,接着就用上面的方法处理onBind方法返回来的信息。
下面的代码是用于向服务器端发送信息:
Message msg = Message.obtain();msg.what = 1;msg.replyTo = clientMessenger;Bundle bundle = new Bundle();String s = et.getText().toString(); //获取EditText控件中的text,然后发送给服务器端 if(s!=null) {bundle.putString("message", s);msg.setData(bundle);try {serverMessenger.send(msg);} catch (RemoteException e) {e.printStackTrace();}}
绑定和解绑的步骤还是和以前一样。
阅读全文
0 0
- Service(二)使用Messenger
- Android 绑定Service的实现方法二:使用Messenger
- 70 Android service 进程间通信 Messenger(二)
- Android Bind Service 使用Messenger
- Android Service使用Messenger通信
- Android Service (Bind Service,使用 Messenger)
- Android Service 之(Bind Service,使用 Messenger)
- Android bound service 详解三:使用Messenger
- Android bound service 详解三:使用Messenger
- Android bound service 详解三:使用Messenger
- Android bound service 详解三:使用Messenger
- Android bound service 详解三:使用Messenger
- 远程绑定Service使用Messenger通讯
- 使用 Messenger 来实现Service的双向通信
- Service练习——通过Messenger(信使)来实现IPC通讯(Messenger底层使用AIDL实现)
- Android Service 之三(Bind Service,使用 Messenger)
- Android Service 之三(Bind Service,使用 Messenger)
- Android Service(二) Service使用
- Java IO -- 序列化
- keytool命令行创建Android安卓 keystore签名
- python解析URL中的域名
- POJ 2112:Optimal Milking
- H5性能测试入门及优化建议
- Service(二)使用Messenger
- 如何理解接口这个抽象的概念?
- jQuery——事件
- 关于端口聚合或端口聚合称呼的误区
- kali源代码简单说明
- HashMap-数组+链表集合
- 初识MVVM
- 学习Glide--Android图片加载框架
- leetcode.array--1. Two Sum