如果你需要在不同进程间通信,你可以在Service中使用Messenger来实现进程中通信。
如果使用这种方式,Service中需要定义一个Handler对象(负责对客户端发送过来的Message进行响应)。
Messenger可以共享给client一个IBinder对象,client通过这个IBinder对象向Service发送Message,而前面提到的Handler对象是这一切的基础。
注:使用这种方式进行通信是不支持多线程的。
那就让我们来看看使用这种方式进行通信吧!
注:Service在声明时必须对外开放,即android:exported="true",且本文是通过Intent启动的Service,所以在声明时该Service可以接收特定的Action。
1、在Service中创建一个Handler对象,来处理从client发过来的Message
2、根据创建的Handler对象创建一个Messenger对象
3、使用Messenger的getBinder方法得到一个IBinder对象,并在Service的onBind方法中将其反出去
4、client在onServiceConnected中根据IBinder参数创建一个Messenger对象(可参考Messenger的构造函数)
5、client可以使用上一步得到的Messenger对象来给Service发送Message了
经过上面的五部我们就能让client与Service进行通信。client使用Messenger对象给Service发送Message后,Service中的Handler将会对消息作出响应。
上面实现的仅仅是单向通信,即client给Service发送消息,如果我需要Service给client发送消息又该怎样做呢?
其实,这也是很容易实现的,下面就让我们接着上面的步骤来实现双向通信吧~
6、在client中创建一个Handler对象,用于处理Service发过来的消息
7、根据client中的Handler对象创建一个client自己的Messenger对象
8、我们在第5步的时候获得了Service的Messenger对象,并通过它来给Service发送消息。这时候,我们将client的Messenger对象赋给待发送的Message对象的replyTo字段
9、在Service的Handler处理Message时将client的Messenger解析出来,并使用client的Messenger对象给client发送消息
这样我们就实现了client和Service的双向通信。client和Service都有自己的Handler和Messenger对象,使得对方可以给自己发送消息,值得注意的是client的Messenger是通过Message的replyTo传递给Service的。
Demo链接:http://pan.baidu.com/share/link?shareid=583593&uk=2953765628
相关推荐
"绑定服务"(Bound Service)是服务的一种类型,它允许其他组件(如Activity)与服务进行交互和通信。在这种交互中,"Messenger"是一个轻量级的通信机制,常用于绑定服务中的双向通信。本篇文章将深入探讨如何通过...
在绑定服务中使用Messenger,可以实现客户端和服务端之间的双向通信,即两者都能向对方发送消息。 首先,我们需要创建一个实现了`Binder`接口的内部类,通常命名为`LocalBinder`。这个内部类负责将服务暴露给客户端...
以下是使用`Messenger`绑定`Service`的详细步骤和注意事项: 1. **创建Handler对象**: 在Service中,首先我们需要创建一个`Handler`对象,这个`Handler`将负责处理来自客户端的`Message`。`Handler`会回调其`...
在这种场景下,Android提供了多种进程间通信(IPC,Inter-Process Communication)方式,其中之一就是使用Messenger。本文将详细讲解如何在Android中通过Messenger实现在Activity和Service之间的通信。 Messenger是...
总的来说,Messenger是Android中实现简单IPC通信的一种有效方式,尤其适用于需要跨进程传递简单消息的场景。然而,对于复杂的数据结构和双向通信需求,开发者可能需要考虑使用其他IPC机制,如AIDL。在实际开发中,应...
第三种方式是使用Messenger。Messenger是基于Binder的一种轻量级通信方式,适用于简单的消息传递。Activity和Service分别创建一个Messenger实例,通过它们发送和接收Message对象。Message中可以携带数据,Service端...
本教程将介绍如何使用Messenger来实现在不同进程间的通信。 首先,理解 Messenger 的基本概念。Messenger 是 Android 提供的一种简单接口,用于在不同的进程间传递消息对象(Message)。每个 Messenger 都绑定到一...
serviceMessenger = new Messenger(service); // 发送消息到服务 } @Override public void onServiceDisconnected(ComponentName name) { serviceMessenger = null; } }; @Override protected void ...
本文将深入探讨如何使用AIDL(Android Interface Definition Language)和Messenger两种方式来实现Android应用间的IPC。 首先,让我们理解AIDL。AIDL是一种特殊的接口定义语言,用于在Android中创建跨进程调用的...
Messenger是一种轻量级的IPC机制,它基于AIDL(Android Interface Definition Language)实现,但简化了接口定义和消息传递的过程。 **Messenger基础** Messenger是一个实现了Handler的类,它可以发送和接收...
Android 使用 Service 实现 IPC 通信的 2 种方式 Android 中的 IPC(Inter-Process Communication)通信是一种重要的机制,允许不同进程之间进行数据交换和信息共享。Android 中有多种实现 IPC 通信的方式,本文将...
- MainActivity:启动Service,绑定Service,与Service通信,展示如何使用Service的示例代码。 - AndroidManifest.xml:配置文件中声明Service,赋予必要的权限。 学习这个实例,开发者可以理解Service的运作机制,...
首先,我们来看`BindService`,这是Android中Activity绑定Service的主要方式。通过绑定,Activity可以与Service建立连接,并进行通信,获取Service的方法调用,甚至监控Service的状态。绑定服务的优点在于它可以提供...
Android提供了多种跨进程通信的方式,其中Binder、Messenger和AIDL是最常见且重要的三种。下面将详细阐述这三种机制的工作原理、使用场景以及如何实现。 **Binder** Binder是Android系统的核心组件,是Android IPC...
2. 绑定Service:使用`bindService()`绑定Service,提供服务接口给其他组件使用。当所有客户端都解绑后,Service会自动销毁。 注意Service的内存管理: 1. 长时间运行的Service可能消耗大量资源,可能导致设备性能...
Messenger提供了一种通过Handler发送和接收Message对象的方式来实现在不同进程间的数据传递。创建一个Messenger对象,绑定到服务,然后通过这个Messenger对象发送Message,服务端接收到Message后,通过对应的Handler...
- **实现 IPC**: 除了基本的 Service 功能外,还可以通过多种方式实现 IPC,包括使用 `Messenger`, `AIDL` 等技术。 - **Messenger**: 通过 `Messenger` 可以轻松实现跨进程的简单消息传递。 - **AIDL**: 用于构建更...
这种绑定方式使客户端能直接调用Service的方法,实现了客户端和服务之间的双向通信。在绑定过程中,通常会用到IBinder接口,它是Android进程间通信(IPC,Inter-Process Communication)的基础。 **Messenger** ...