平时一说进程间通讯,大家都会想到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
分享到:
相关推荐
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序或同一应用内不同进程之间数据共享和协同工作的重要手段。"Messenger进程间通信"是一种轻量级的IPC方式,常用于简单的双向通信...
"鸿洋Messenger进程间通讯整理"这个主题主要探讨了如何利用Android的Messenger服务进行高效的进程间通信。鸿洋,即王建辉,是知名Android开发者,他在CSDN博客上分享了一篇文章,详细解析了这一技术。 Messenger是...
总结来说,Android的Messenger机制为开发者提供了一种简单、方便的进程间通信方式,尤其适用于简单的命令式交互。通过理解并实践"ActivityMsgToService"这个示例,你可以更好地掌握如何在实际项目中运用Messenger来...
本示例探讨的是如何使用Messenger进行Android进程间通信。Messenger是一种轻量级的IPC机制,它基于AIDL(Android Interface Definition Language)实现,但简化了接口定义和消息传递的过程。 **Messenger基础** ...
此demo就基于鸿洋博客(http://blog.csdn.net/lmj623565791/article/details/47017485)修改... 原博客实现了int进行传递,修改为可以使用string 详情运行demo看log 欢迎加入QQ群:Android开发艺术探索 ⑦ 476288569
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。Android Aidl(Android Interface Definition Language)是Android提供的一种强大的IPC机制,它允许两...
1. Android进程间通信(IPC)的概念和重要性。 2. Messenger服务的创建和使用,包括创建Messenger对象、内部Handler的实现以及onBind方法的重写。 3. 客户端如何绑定服务,获取Messenger对象并发送消息。 4. 使用...
总结来说,基于Messenger的进程间通信框架为Android开发提供了高效、轻量的解决方案,尤其适合那些对性能要求较高、需要保持应用稳定性的场景。通过理解并熟练运用这种技术,开发者可以构建更加健壮、可扩展的移动...
总结来说,Android的Messenger是实现简单进程间通信的有效工具,它简化了Binder的使用,使得开发者能够轻松地在服务和客户端之间传递消息。在实际开发中,理解并熟练运用Messenger,能够帮助我们构建更健壮、高效的...
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。Intent、Messenger和AIDL(Android Interface Definition Language)是Android提供的三种主要的IPC...
### Android进程间通信详解 #### 一、概述 在Android应用开发中,进程间通信(IPC,Inter-Process Communication)是一项重要的技术。由于Android应用程序通常由多个组件组成,并且每个组件可能运行在不同的进程中...
总结,IPC进程间通信是Android开发中的重要组成部分,而Messenger是实现IPC的一种简单有效的方式。结合状态模式和备忘录模式,我们可以更好地管理和控制通信过程,提高程序的健壮性和可靠性。在实际项目中,可以参考...
IPC是Inter-Process Communication的缩写,意为进程间通信或者跨进程通信,是指两个进程进行数据交换的过程。本code是使用Messenger来完成进程间通信的,后续会继续上传别的通信方式Demo.
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键的技术,使得不同进程之间能够共享数据、协调工作。本资源主要介绍如何使用Messenger服务来实现简单有效的IPC。Messenger是一个轻量...
本教程将通过“android_IPC进程间通信Demo”中的客户端和服务端示例,深入讲解如何利用Messenger对象和AIDL(Android Interface Definition Language)来实现这一目标。 首先,我们来看一下Messenger的使用。...
在Android系统中,多进程通信(Multi-Process Communication, 简称MPC)是一种重要的技术,用于在不同进程间交换数据和协调操作。在Android应用开发中,一个应用程序默认运行在一个单独的进程中,但有时我们需要创建...
2. **IPC Binder**:在RemoteService和RemoteServiceServer工程中,展示了如何创建和使用Binder进行进程间通信。服务(Service)在远程进程中提供 Binder 对象,客户端(Client)通过Binder接口调用服务的方法,实现...
Android进程通信 - AIDL的使用方法Messenger(基于Binder)类似于Hnadler发消息用法Android进程间通信 - Messenge
标题“安卓通信方式之Messenger”暗示我们将讨论如何在Android中使用Messenger进行进程间通信。 Messenger是Android SDK提供的一种简单方法,用于在不同的线程或者进程之间传递消息。它基于Binder机制,但相比于...
Messenger 实现进程间通信 可以翻译为信使,通过它可以实现在不同进程中传递Message 对象。 是一种轻量级的 IPC 方案。 Messenger 底层是通过AIDL实现的。 一次处理一个请求,不存在并发情况。