平时一说进程间通讯,大家都会想到AIDL,其实messenger和AIDL作用一样,都可以进行进程间通讯。它是基于消息的进程间通信,就像子线程和UI线程发送消息那样,是不是很简单,还不用去写AIDL文件,是不是有点小爽。哈哈。
此外,还支持记录客户端对象的Messenger,然后可以实现一对多的通信;甚至作为一个转接处,任意两个进程都能通过服务端进行通信。
与 AIDL 比较:
当您需要执行 IPC 时,为您的接口使用 Messenger 要比使用 AIDL 实现更加简单,因为 Messenger 会将所有服务调用排入队列,而纯粹的 AIDL 接口会同时向服务发送多个请求,服务随后必须应对多线程处理。
对于大多数应用,服务不需要执行多线程处理,因此使用 Messenger 可让服务一次处理一个调用。如果您的服务必须执行多线程处理,则应使用 AIDL 来定义接口。
接下来看下怎么写:
服务端:
1.创建一个handler对象,并实现hanlemessage方法,用于接收来自客户端的消息,并作处理
2.创建一个messenger(送信人),封装handler
3.messenger创建一个IBinder对象,通过onBind返回给客户端
客户端:
1.在activity中绑定服务
2.创建ServiceConnection并在其中使用 IBinder 将 Messenger实例化
3.使用Messenger向服务端发送消息
4.解绑服务
5.服务端中在 handleMessage() 方法中接收每个 Message
这样,客户端并没有调用服务的“方法”。而客户端传递的“消息”(Message 对象)是服务在其 Handler 中接收的。
上面实现的仅仅是单向通信,即客户端给服务端发送消息,如果我需要服务端给客户端发送消息又该怎样做呢?
其实,这也是很容易实现的,下面就让我们接着上面的步骤来实现双向通信吧
1.在客户端中创建一个Handler对象,用于处理服务端发过来的消息
2.创建一个客户端自己的messenger对象,并封装handler。
3.将客户端的Messenger对象赋给待发送的Message对象的replyTo字段
4.在服务端的Handler处理Message时将客户端的Messenger解析出来,并使用客户端的Messenger对象给客户端发送消息
这样就实现了客户端和服务端的双向通信了。
注意:注:Service在声明时必须对外开放,即android:exported="true";另外,我在开发完APP都会用一些APP在线自动化测试工具进行测试:
http://www.ineice.com
分享到:
相关推荐
Messenger进程间通信,包括Service服务端代码和客户端代码;进程内部通信/进程间通信并且应答;
android 通过 Messenger 进行进程通信的 demo ,实现 Activity 和 service 的跨进程通信
此demo就基于鸿洋博客(http://blog.csdn.net/lmj623565791/article/details/47017485)修改... 原博客实现了int进行传递,修改为可以使用string 详情运行demo看log 欢迎加入QQ群:Android开发艺术探索 ⑦ 476288569
http://blog.csdn.net/lmj623565791/article/details/47017485
轻量级进程间通信框架,基于 Messenger 实现。进程间传递数据不错的选择。
IPC是Inter-Process Communication的缩写,意为进程间通信或者跨进程通信,是指两个进程进行数据交换的过程。本code是使用Messenger来完成进程间通信的,后续会继续上传别的通信方式Demo.
Android进程通信 - AIDL的使用方法Messenger(基于Binder)类似于Hnadler发消息用法Android进程间通信 - Messenge
Messenger 实现进程间通信 可以翻译为信使,通过它可以实现在不同进程中传递Message 对象。 是一种轻量级的 IPC 方案。 Messenger 底层是通过AIDL实现的。 一次处理一个请求,不存在并发情况。
包含两个eclipse工程,客户端和服务端,演示了android在使用Messenger对象和AIDL实现进程间通信。
android_IPC进程间通信Demo 移动开发 - Android包含两个eclipse工程,客户端和服务端,演示了android在使用Messenger对象和AIDL实现进程间通信.zip
android_IPC进程间通信Demo 移动开发 - Android包含两个eclipse工程,客户端和服务端,演示了android在使用Messenger对象和AIDL实现进程间通信.zip
本资源使用 Messenger 实现进程间通讯,包含 msger_C 和 msger_S 两个 Module,案例没有复杂的业务逻辑,适合初学者。
提到的进程间通信(IPC:Inter-Process Communication),在Android系统中,一个进程是不能直接访问另一个进程的内存的,需要提供一些机制在不同的进程之间进行通信,Android官方推出了AIDL(Android Interface ...
Messenger 可以翻译为信使,顾名思义,通过它可以实现在不同进程中传递 Message 对象,在 Message 中可以携带我们需要传递的数据,借此就可以实现数据在不同进程间的通信。 Messenger 底层实现 Messenger 是一种轻...
使用Messenger进行进程间通信的简单示例代码。
Messenger 线程安全的进程间通信服务
简单来讲,Messenger其实就是Binder通信的包装器,是一种基于消息传递的进程间通信工具。 //Messenger实现了Parcelable接口,因此可以跨进程传输 public final class Messenger implements Parcelable { ............
文章 Android 进程间通信:Messenger 中的示例代码,blog地址:https://blog.csdn.net/zzw0221/article/details/93399407
一个Android通过Messenger通信的demo,简单实现了进程间通信。