Service绑定到Android Component组件上,其通讯方式一般是如下三种
1. 在onBind(Intent intent)中返回Binder对象,通过此接口与Service交互
2. 通过IBinder对象创建一个Messenger,通过Handler的方式来与Service交互
3. 通过AIDL进行交互
第一种返回Binder的方式是最为方便的,因为可以在Binder中直接返回Service实例,使Component直接与 Service 通信。
但是存在一个局限性,就是只有在Service与Component在同一个进程中的时候才可以通过Binder的方式进行,如果这个Service是一个程序内部使用的,那么这种方式是首选的通信方式。
其中需要注意的是:当多个Component绑定到同一个Service的时候,系统只会在第一个Component进行绑定的时候调用onBind方法,而其他的Component在绑定的时候,直接返回第一个返回的Binder,也就是说,多个组件是用的同一个Binder。
如果企图在不同进程间返回Binder,系统会在运行时报错。
第二种是通过一个Messenger进行交互,Messenger的创建和使用都很简单,如下:
//在Service中
@Override
public IBinder onBind(Intent arg0) {
return mMessenger.getBinder();
}
private Messenger mMessenger = new Messenger(new HelloHandler());
class HelloHandler extends Handler{
@Override
public void handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
}
}
//在Activity中
private Messenger mMessenger ;
private ServiceConnection sc = new ServiceConnection(){
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, "服务连接");
mMessenger = new Messenger(service);
mBound = true;
}
public void onServiceDisconnected(ComponentName name) {
Log.i(TAG, "断开服务");
mBound = false;
}
};
这样就可以通过发送消息的方式来与Service沟通了,其中Messenger的优势在于,他可以在Service与Compontent位于不同进程的时候来通信,这个是Binder方式无法做到的,Messenger底层是使用AIDL实现的。
一般来说前两种可以满足大多数程序的需求,如果要做并发处理的Service,那么要使用AIDL来实现,具体见http://developer.android.com/guide/developing/tools/aidl.html
分享到:
相关推荐
### SCA Service Component Architecture #### 一、SCA 概述与定义 **SCA (Service Component Architecture)** 是一种开放标准规范,旨在提供一个统一的编程模型,用于构建和服务组合面向服务架构(SOA)的应用...
《Understanding SCA (Service Component Architecture)》是一本由Jim Marino与Michael Rowley共同撰写的书籍,旨在帮助读者深入理解服务组件架构(Service Component Architecture,简称SCA)。本书于2009年7月出版...
SCA(Service Component Architecture)是一种面向服务的组件模型,旨在简化面向服务架构(SOA)的实现,通过提供一种与语言无关的编程模型来统一不同类型的组件调用。IBM在推出WebSphere Process Server(WPS)时...
《理解SCA:服务组件架构》是Addison-Wesley在2009年6月出版的一本关于服务组件架构(Service Component Architecture, SCA)的专业书籍。这本书深入浅出地探讨了SCA这一重要的软件架构模式,旨在帮助读者理解和应用...
1. **服务(Service)与组件(Component)**:服务是框架中负责处理特定业务逻辑的单元,而组件则是可复用的、独立的功能模块。服务和组件的设计模式有助于代码的解耦和模块化,提高代码的可维护性和扩展性。 2. **...
2. Service:Service是在后台运行的组件,不与用户界面直接交互。它可以执行长时间运行的任务,例如音乐播放或网络通信。在组件化设计中,Service也可以作为独立的组件,供其他模块调用。 3. BroadcastReceiver:...
将各种组件组装在一起以创建业务解决方案服务:创建用于远程访问组件和组合功能的界面组合,服务及其与组件的关系是在动态描述符文件中定义的,因此可以实现每个组件,而无论其如何与其他组件通信。这个框架是关于...
1. **服务组件(Service Component)**:这是Aixis2Service的基本单元,代表了一个可部署的服务。服务组件包含了业务逻辑和必要的元数据,描述了服务的接口、实现和依赖关系。 2. **服务注册(Service Registry)**...
Service Mesh的核心理念是将服务间的交互从应用程序中解耦出来,由Sidecar代理负责,这样服务只需要关注自身的业务逻辑,而无需关心如何与其他服务通信。Sidecar代理通过RPC协议(如gRPC、HTTP/2等)进行通信,提供...
从使用角度看,Service可以双向与Activity通信,提供数据和功能支持。例如,Activity可以通过bindService方法与Service建立连接,获取Service提供的数据或功能。Service也可以单向接收Intent请求,进行数据处理和...
6. **替代方案**:为了实现不同平台和浏览器间的通信,现代Web开发倾向于使用Web APIs(如WebRTC、WebSocket)以及框架(如Angular、React、Vue等)提供的解决方案,例如通过JSONP、CORS、Web Workers或Service ...
7. **.NET Remoting与WCF**: 比较.NET Remoting与后来的Windows Communication Foundation(WCF),讨论各自的优缺点和适用场景。 这本书还可能涉及了COM+和.NET Enterprise Services,这些都是微软提供的高级组件...
- `Component`和`Component 2`:这些可能是CodeSys中的组件文件,包含了实现HTTP通信的代码和配置。 通过深入研究这些文件,可以进一步了解具体实现HTTP通信的细节和配置。例如,可能有预编译的库函数或示例代码,...
本文将详细介绍如何使用`Messenger`机制来实现`Activity`与`Service`之间的通信,以及如何进一步扩展这种通信机制以支持跨进程通信。 #### Messenger实现Activity与Service通讯 `Messenger`是一种用于在不同组件...
在SAP ECC(Enterprise Central Component)系统中,Web Service被广泛用于集成和交互,尤其在跨系统的业务流程自动化中发挥重要作用。 在SAP ECC 6.0 SP14之后的版本中,发布Web Service服务主要涉及以下步骤: 1...
Web Service与传统的COM(Component Object Model)组件进行了对比,两者都支持组件重用和安全性,但Web Service通过HTTP/SOAP/XML实现了更高级别的位置透明性和跨平台能力。COM主要依赖于二进制接口和注册表,而Web...
Activity之间的通信、Activity与Fragment以及Activity与Service的交互是构建复杂应用程序的基础。本文将深入解析这些通信方式的源码,帮助开发者理解其工作原理。 1. **Activity之间的通信**: 在Android中,...
在IT领域,Web Service是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的通信协议,它允许不同的应用程序之间进行数据交换。在这个"用Delphi实现Web Service的简单示例"中,我们将探讨如何使用Delphi这一强大的...