Messenger--信使
来源:互联网 发布:石家庄专业关键词优化 编辑:程序博客网 时间:2024/04/28 23:05
Messenger可以在不同进程中传递Message对象,是一种轻量级的IPC方案,它的底层实现是AIDL。它对AIDL做了封装,使得我们可以更简单地进行进程间通信。它一次处理一个请求,因此在服务端我们不用考虑线程同步的问题。
//服务端public class MessengerService extends Service{ private static final String TAG="MessengerService"; //接收消息 并且处理消息 private static class MessengerHandler extends Handler{ public void handleMessage(Message msg){ switch(msg.what){ case MyConstants.MSG_FROM_CLIENT:: Log.i(TAG,"receive msg from Client:"+msg.getData().getString("msg")); //接收客户端发送的消息之后进行响应 Messenger client=msg.replyTo; Messenge replyMessenge =Message.obtain(null,MyConstants,MSG_FROM_SERVICE); Bundle bundle=new Bundle(); bundle.putString("reply","恩,你的消息我已经收到,稍后会回复你!"); replyMessage.setData(bundle); try{ client.send(replyMessage); }catch(Exception e){ e.printStackTrace(); } break; default: super.handleMessage(msg); } } } //将Messenger与Handler进行关联 private final Messenger mMessenger =new Messenger(new MessengerHandler()); //返回Messenger对象底层的Binder对象 public IBinder onBind(Intent intent){ return mMessenger.getBinder(); }}
//客户端public class MessengerActivity extends Activity{ private static final String TAG="MessengerActivity"; private Messenger mService; //接收服务端 onBind()方法返回的IBinder对象 private ServiceConnection mConnection =new ServiceConnection(){ public void onServiceConnected(ComponentName className,IBinder service){ //创建一个可以向服务器发送消息的Messenger对象 mService =new Messenger(service); //构建消息对象 Messenger msg=Message.obtain(null,MyConstants.MSG_FROM_CLIENT); Bundle data=new Bundle(); //利用Bundle来进行数据的传输 data.putString("msg","hello,this is client."); msg.setData(data); ///////////// //接收服务端回复的Messenger通过Message的replyTo参数传递给服务端 msg.replyTo = mGetReplyMessenger; //////////// try{ mService.send(msg); }catch(Exception e){ e.printStackTrace(); } } public void onServiceDisconnected(ComponentName className){ } }; //////// //接收服务端的回复 private Messenger mGetReplyMessenger =new Messenger(new MessengerHandler()); private static class MessengerHandler extends Handler{ public void handleMessage(Message msg){ switch(msg.what){ case MyConstants.MSG_FROM_SERVICE: Log.i(TAG,"receive msg from Service:"+msg.getData().getString("reply")); break; default: super.handleMessage(msg); } } } //////// protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_messenger); Intent intent =new Intent(this,MessengerService.class); bindService(intent,mConnection,Context.BIND_AUTO_CREATE); } protected void onDestroy(){ unbindService(mConnection); super.onDestroy(); }}
0 0
- Messenger(信使)
- Messenger--信使
- 信使服务 (Messenger)
- Tokonda Messenger(信使)
- RemoteService中的 Messenger信使
- Android信使Messenger解析
- Android信使Messenger范例源码
- Windows信使服务Messenger的安装
- Android中的信使Messenger的源码解析
- Messenger(信使)进程间通信使用
- Android 绑定类型服务---使用信使(Messenger)
- Android 绑定类型服务---使用信使(Messenger)
- Android开发之Messenger信使和service实现跨进程
- Activity与Service通信之信使(Messenger)
- Android进程间通信之--Messenger(信使)
- Service与Activity通信方式之Messenger(信使)
- 信使
- 信使
- 前端事件处理addEventListener和onclick
- iOS8 【xcode6中添加pch全局引用文件】
- JDBC连接步骤
- 小笨狼漫谈多线程:GCD(一)
- poj 3278 Catch That Cow
- Messenger--信使
- 大牛人博客
- BestCoder 20160416 Sequence大数运算
- Linux-2.6.24移植到FL2440开发板
- 移动端(web app)默认样式重置汇总
- Mysql初始化root密码和允许远程访问
- B树、B-树、B+树、B*树
- 学生信息管理系统之问题总结(2)
- Hive运行报错整理01