使用Messenger
来源:互联网 发布:nginx反向代理什么意思 编辑:程序博客网 时间:2024/05/18 06:21
Messenger可以翻译为“信使”,顾名思义,通过它可以再不同进程间传递数据。Mesenger其实是一种轻量级的IPC,它的底层实现就是AIDL。从构造函数就可以看出来
public Messenger(Handler target) { mTarget = target.getIMessenger(); } public Messenger(IBinder target) { mTarget = IMessenger.Stub.asInterface(target); }
使用方法
1.服务端进程
创建一个Service处理连接请求,同时创建一个Handler来创建一个Messenger对象,然后在onBind返回这个Binder
public class MessengerService extends Service { @Override public IBinder onBind(Intent intent) { return mMessenger.getBinder(); } private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { if (msg.what == 0x001) { Log.i("server", msg.getData().getString("msg")); // 回复消息给客户端 Messenger client = msg.replyTo; Message replayMessage = Message.obtain(null, 0x002); Bundle bundle = new Bundle(); bundle.putString("reply", "消息收到"); replayMessage.setData(bundle); try { client.send(replayMessage); } catch (RemoteException e) { e.printStackTrace(); } } } } private Messenger mMessenger = new Messenger(new MessengerHandler());}
2.客户端进程
首先要绑定Service,绑定成功后用返回的IBinder对象创建一个Messenger,通过这个Messenger就可以向服务端发送消息了。如果需要服务端能够回应客户端,我们还需要创建一个Handler并新创建一个Messenger,并把这个Messenger对象通过Message的replyTo函数传给服务端
public class MainActivity extends Activity { private Messenger mService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this, MessengerService.class); bindService(intent, connection, Context.BIND_AUTO_CREATE); } private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = new Messenger(service); Message message = Message.obtain(null, 0x001); Bundle date = new Bundle(); date.putString("msg", "hello, this is client"); message.setData(date); // 注意 message.replyTo = mGetMessenger; try { mService.send(message); } catch (RemoteException e) { e.printStackTrace(); } } }; protected void onDestroy() { unbindService(connection); super.onDestroy(); }; // 下面是客户端接收消息 private Messenger mGetMessenger = new Messenger(new MessengerGetHandler()); private static class MessengerGetHandler extends Handler { @Override public void handleMessage(Message msg) { if (msg.what == 0x002) { Log.i("client", msg.getData().getString("reply")); } } }}
注册Service
<service android:name=".service.MessengerService" android:process=":remote"></service>
0 0
- 使用Messenger
- 使用Messenger
- windows messenger 安装使用
- 使用Messenger的IPC
- Messenger的使用
- Messenger 使用介绍
- IPC-Messenger使用实例
- Messenger使用介绍
- 使用Messenger实现IPC
- messenger 的使用
- Messenger
- Messenger
- Messenger
- Messenger
- Messenger
- 使用 MessengerAPI 控制 MSN Messenger
- MVVM Light Messenger的使用
- Android Bind Service 使用Messenger
- Thrift源码系列----6.TThreadedSelectorServer源码实现
- HIHOCODER 1329 stl
- SpringMVC注记式验证学习笔记——指定验证出错提示信息资源文件及其编码
- html+selenium+webdriver+java,一个前端自动化Demo
- 022 Generate Parentheses
- 使用Messenger
- jdk7 Collections.sort()方法报错分析
- 1107. Social Clusters (并查集 )
- 小博老师解析Java经典面试题 ——常见Http状态号
- 在keras 上实践,通过keras例子来理解lastm循环神经网络
- BestCoder Round #82 (div.2)
- SQL Server 2008 R2 AdventureWorks 数据库安装
- SpringMVC 中的Interceptor 拦截器
- jumpp