Messenger--信使

news/2024/12/29 3:09:34/

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();}
}

http://www.ppmy.cn/news/601150.html

相关文章

Messenger的具体应用

之前的文章中最Messenager做过简单的介绍,但是在进程间的通讯实例却一直没有搞出来。下面演示简单的事例: 需求是这样的:我们需要具体的功能《垃圾清理》,既可以在App中调用,也可以在系统中快捷调用,同时可…

越来越“变态”的验证码,到底在验证什么?

验证码要验证的是它所面对的是真实的人还是计算机程序。最开始的验证码非常的简单,只要输入几个数字就可以。不知道从何时开始见证了变得越来越变态,变得花样不断的验证,验证码就不仅仅是视力的挑战了,有的时候已经是视力及智力的…

打造加速组织变革的PMO—新药研发PMO实践分享︱先声药业研发PMO负责人

先声药业研发PMO负责人谢少斐先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:打造加速组织变革的PMO—新药研发PMO实践分享。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 2023年生物医药…

【软考网络管理员】2023年软考网管初级常见知识考点(25)- 网络地址转换NAT

涉及知识点 什么是NAT技术?静态网络地址转换,动态网络地址转换,基于端口的网络地址转换,NAPT的配置命令和动态NAT配置命令,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于…

C语言发展史、前途、是否会被淘汰

发展史 C语言是1972年由Dennis Ritchie在贝尔实验室创建的,它是汇编语言的升级版本。在20世纪70年代中期,C语言被广泛应用于Unix操作系统的开发中,它的出现极大地简化了系统的编程,使Unix系统成为流行的操作系统之一。 在80年代…

汤姆猫java下载手机版_汤姆猫编程星球app下载-汤姆猫编程星球下载v1.0.8-西西软件下载...

汤姆猫编程星球是一款少儿编程教育软件,帮助想学习编程少年快速学习,多彩多样的玩法,锻炼孩子的思维性,逻辑性,从小时候就加强大脑的锻炼,喜欢的朋友可以在西西下载使用。 软件介绍 汤姆猫编程星球介绍和汤…

06-TOM汤姆猫

// // ViewController.m // 06-TOM汤姆猫 // // Created by yibooo on 16/1/17. // Copyright © 2016年 yibooo. All rights reserved. //#import "ViewController.h"interface ViewController ()property (weak, nonatomic) IBOutlet UIImageView *tom;- (…

python画汤姆猫简笔画_汤姆猫简笔画图片

汤姆猫,你们一定都认识它。他是猫和老鼠里面的主角,每天都抓不到老鼠,所引发的一系列搞笑故事。你喜欢吗?今天先和学习啦小编一起欣赏这些汤姆猫简笔画图片,希望你会有所收获的。 汤姆猫简笔画图片欣赏 汤姆猫简笔画图片1 汤姆猫…