信使 Messenger:

1.服务端需要绑定服务让客户端访问
Messenger sMessenger=new Messenger(new Handler(){  });
public IBind onBind(Intent intent){return 服务端的信使的Binder;}
客户端可以通过该Binder还原出sMessenger的代理类;
2.让客户端绑定
ServiceConnection conn=new ServiceConnection(){两个回调方法;public void onServiceConnected(ComponentName name, IBinder binder) {sMessenger=new Messenger(binder); //通过服务端的binder构造出服务端信使的代
理;}@Overridepublic void onServiceDisconnected(ComponentName name) {}};
在绑定方法里写:bindService(intent,conn,BIND_AUTO_CREAT);
Intent intent=new Intent();
intent.setComponet(new ComponentName("服务端所在的包名","MyService所在的包名"))
在传递数据方法里传递数据,如果有对象或字符串要传递,必须放在Bundle中;
1.客户端:
public class MainActivity extends AppCompatActivity {Messenger sMessenger;ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {sMessenger=new Messenger(binder);   //通过服务端的binder构造出服务端信使的代理Toast.makeText(MainActivity.this, "远程服务绑定成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {Toast.makeText(MainActivity.this, "远程服务挂起", Toast.LENGTH_SHORT).show();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}Messenger cMessenger=new Messenger(new Handler(){@Overridepublic void handleMessage(Message msg) {Grils grils= (Grils) msg.getData().getSerializable("yk1");  //接收服务器传递的数据Toast.makeText(MainActivity.this, "收到服务器的回复"+grils+msg.arg1, Toast.LENGTH_SHORT).show();}});public void bind(View view) {Intent intent=new Intent();//服务端所在的包名                //Myservice1所在的包名intent.setComponent(new ComponentName("com.example.messengerservice","com.example.messengerservice.MyService1"));boolean b= bindService(intent ,conn,BIND_AUTO_CREATE);if(!b){Toast.makeText(MainActivity.this, "绑定失败", Toast.LENGTH_SHORT).show();}}public void send(View view) {Message MsgToService=Message.obtain();MsgToService.arg1=1111111;MsgToService.arg2=66666;Bundle bundle = new Bundle();bundle.putSerializable("yk",new Grils("雪儿",23));MsgToService.setData(bundle);MsgToService.replyTo=cMessenger;    //回信地址是客户端信使try {sMessenger.send(MsgToService);  //使用服务端的信使把消息传递给服务端} catch (RemoteException e) {e.printStackTrace();}}
}
要传递对象的实体类:
重点:(服务端和客户端的实体类要完全一样,包名也要一样)
public class Grils implements Serializable{String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Grils(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Grils{" +"name='" + name + '\'' +", age=" + age +'}';}
}
2.服务端
注意不要忘记注册服务:
<service android:name=".MyService1" android:exported="true"/>public class MyService1 extends Service {private static final String TAG ="aaa" ;Messenger sMessenger=new Messenger(new Handler(){@Overridepublic void handleMessage(Message msg) {Grils grils = (Grils) msg.getData().getSerializable("yk");Log.d(TAG, "handleMessage() called with: " + "msg= [" + msg + "]");Toast.makeText(MyService1.this, "收到客户端消息"+grils+msg.arg1+msg.arg2, Toast.LENGTH_SHORT).show();//给客户端回信Messenger cMessenger = msg.replyTo;Message replay=new Message();replay.arg1=88888;Bundle bundle = new Bundle();bundle.putSerializable("yk1",new Grils("籽涵",1));replay.setData(bundle);try {cMessenger.send(replay);   //用客户端的信使数据传给客户端} catch (RemoteException e) {e.printStackTrace();}}});@Nullable@Overridepublic IBinder onBind(Intent intent) {return sMessenger.getBinder();     // return 服务端的信使的Binder;}@Overridepublic boolean onUnbind(Intent intent) {return super.onUnbind(intent);}@Overridepublic void onDestroy() {super.onDestroy();}@Overridepublic void onCreate() {super.onCreate();}}
点击向服务端发送消息:

信使 Messenger相关推荐

  1. java 信使服务_1.简单化-信使messenger+集合型参数(collecting parameter)

    1.简单化-信使messenger+集合型参数(collecting parameter) ? ? 以下就开始我们的设计模式之旅吧!其实这里我说一下题外话先,为什么我要写博客,其实写博客这个我很久就想 ...

  2. Android信使Messenger解析

    private final class MessengerImpl extends IMessenger.Stub {public void send(Message msg) {msg.sendin ...

  3. Android 绑定类型服务---使用信使(Messenger)

    如果需要服务跟远程进程通信,那么就可以使用Messenger对象来给服务提供接口.这种技术允许你在不使用AIDL的情况下执行进程间通信(IPC). 以下是信使(Messenger)对象的使用概要: 1 ...

  4. java 信使服务_Android 绑定类型服务---使用信使(Messenger)

    如果需要服务跟远程进程通信,那么就可以使用Messenger对象来给服务提供接口.这种技术允许你在不使用AIDL的情况下执行进程间通信(IPC). 以下是信使(Messenger)对象的使用概要: 1 ...

  5. Android进程使用Messenger通信

    进程之间不能共享内存数据, 但是可以进行通信, 除了简单的Intent通信, 也可以使用Messenger, Messenger基于AIDL实现, 顺序执行, 不支持并发. 为了区分通信的始末, 我们 ...

  6. Android开发笔记(五十一)通过Messenger实现进程间通信

    进程间通信IPC IPC是"Inter-Process Communication"的缩写,即进程间通信.Android为APP提供了多进程工作模式,这是因为多线程存在若干局限: ...

  7. Android 进程使用 Messenger 通信

    欢迎Follow我的GitHub: https://github.com/SpikeKing 本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导.在京东即可购买:http ...

  8. Android Messenger使用教程

    Messenger Messenger,信使,作为进程间通信之一,内部原理是AIDL. AIDL教程,可以去AIDL传送门了解. 使用 使用Messenger让服务端和客户端进行通信 服务端 新建服务 ...

  9. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

最新文章

  1. 如何在10分钟内进行可用性测试
  2. vb编程转为c语言,C语言,VB编程题
  3. makefile ifneq多个判断条件_Python基础语法——条件判断
  4. C++模拟实现Objective-C协议和代理模式
  5. ssm框架重定向_Java SSM 框架面试题,附答案!
  6. Dapr + .NET 实战(十二)服务调用之GRPC
  7. apache ii评分和死亡率_危重病人APACHE II评分表
  8. cmake Can‘t find third_party/gtest
  9. Diffusion model—扩散模型
  10. mysql relay_mysql relay log参数汇总
  11. oracle发生20001,ORA-20001错误一例
  12. 常见测试用例设计之水杯
  13. 适合普通人的108个短视频项目:不用出镜也能赚钱的手机摄影玩法(3)
  14. xlsx表格怎么做汇总统计_EXCEL如何筛选表格里相同的文字并统计!
  15. 如何用UE4制作2D游戏文档(一)——基础篇
  16. edge浏览器如何把网页放到桌面_edge浏览器怎么把网页放桌面 - 卡饭网
  17. 使用 git 创建补丁和打补丁。
  18. 基于Spyder(Python 3.8)网络爬虫东方财经股票数据
  19. 数据治理-1. 数据集成-总体方案
  20. 网站建设入门技术导航

热门文章

  1. 股市小白能打败短线高手吗?
  2. F#教程(一)——————F#语言概述
  3. 服务器布署(一):阿里云服务器,配合宝塔使用(网页端宝塔)
  4. 导航定位系统的原理解析(一个小白写给另一个小白)
  5. ionic2 打包apk 注意事项
  6. js 小数精确相加 代码
  7. python图片审核
  8. 提高学习效率方法论:十步学习法—John Z. Sonmez
  9. 关于『HTML5』第一弹
  10. 64位ubuntu能安装mysql,在ubuntu14.04 64位虚拟机中安装mysql