`
我要阳光
  • 浏览: 60346 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Service与Component通信

阅读更多
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
0
0
分享到:
评论

相关推荐

    SCA Service Component Architecture

    ### SCA Service Component Architecture #### 一、SCA 概述与定义 **SCA (Service Component Architecture)** 是一种开放标准规范,旨在提供一个统一的编程模型,用于构建和服务组合面向服务架构(SOA)的应用...

    Understanding SCA (Service Component Architecture)

    《Understanding SCA (Service Component Architecture)》是一本由Jim Marino与Michael Rowley共同撰写的书籍,旨在帮助读者深入理解服务组件架构(Service Component Architecture,简称SCA)。本书于2009年7月出版...

    SCA(Service Component Architecture)编程模型入门

    SCA(Service Component Architecture)是一种面向服务的组件模型,旨在简化面向服务架构(SOA)的实现,通过提供一种与语言无关的编程模型来统一不同类型的组件调用。IBM在推出WebSphere Process Server(WPS)时...

    Addison.Wesley.Understanding.SCA.Service.Component.Architecture.Jun.2009.rar

    《理解SCA:服务组件架构》是Addison-Wesley在2009年6月出版的一本关于服务组件架构(Service Component Architecture, SCA)的专业书籍。这本书深入浅出地探讨了SCA这一重要的软件架构模式,旨在帮助读者理解和应用...

    一个简洁、高效、跨平台、多语言支持的服务端开发框架,面向Service及Component,底层c++实现。.zip

    1. **服务(Service)与组件(Component)**:服务是框架中负责处理特定业务逻辑的单元,而组件则是可复用的、独立的功能模块。服务和组件的设计模式有助于代码的解耦和模块化,提高代码的可维护性和扩展性。 2. **...

    Android代码-AndroidComponent

    2. Service:Service是在后台运行的组件,不与用户界面直接交互。它可以执行长时间运行的任务,例如音乐播放或网络通信。在组件化设计中,Service也可以作为独立的组件,供其他模块调用。 3. BroadcastReceiver:...

    service-component:一个简单的服务组件架构

    将各种组件组装在一起以创建业务解决方案服务:创建用于远程访问组件和组合功能的界面组合,服务及其与组件的关系是在动态描述符文件中定义的,因此可以实现每个组件,而无论其如何与其他组件通信。这个框架是关于...

    Aixis2Service Helloword版

    1. **服务组件(Service Component)**:这是Aixis2Service的基本单元,代表了一个可部署的服务。服务组件包含了业务逻辑和必要的元数据,描述了服务的接口、实现和依赖关系。 2. **服务注册(Service Registry)**...

    service mesh杂谈.pptx

    Service Mesh的核心理念是将服务间的交互从应用程序中解耦出来,由Sidecar代理负责,这样服务只需要关注自身的业务逻辑,而无需关心如何与其他服务通信。Sidecar代理通过RPC协议(如gRPC、HTTP/2等)进行通信,提供...

    Android Activity 与Service进行数据交互详解

    从使用角度看,Service可以双向与Activity通信,提供数据和功能支持。例如,Activity可以通过bindService方法与Service建立连接,获取Service提供的数据或功能。Service也可以单向接收Intent请求,进行数据处理和...

    ocx与js相互通信

    6. **替代方案**:为了实现不同平台和浏览器间的通信,现代Web开发倾向于使用Web APIs(如WebRTC、WebSocket)以及框架(如Angular、React、Vue等)提供的解决方案,例如通过JSONP、CORS、Web Workers或Service ...

    [原版计算机类书籍]OREILLY - COM and .Net Component Services (VBL)

    7. **.NET Remoting与WCF**: 比较.NET Remoting与后来的Windows Communication Foundation(WCF),讨论各自的优缺点和适用场景。 这本书还可能涉及了COM+和.NET Enterprise Services,这些都是微软提供的高级组件...

    CodeSys如何实现HTTP通信

    - `Component`和`Component 2`:这些可能是CodeSys中的组件文件,包含了实现HTTP通信的代码和配置。 通过深入研究这些文件,可以进一步了解具体实现HTTP通信的细节和配置。例如,可能有预编译的库函数或示例代码,...

    Activity与Service通讯、进程通讯

    本文将详细介绍如何使用`Messenger`机制来实现`Activity`与`Service`之间的通信,以及如何进一步扩展这种通信机制以支持跨进程通信。 #### Messenger实现Activity与Service通讯 `Messenger`是一种用于在不同组件...

    Web_Service与SAP_ECC系统服务发布与调用[整理].pdf

    在SAP ECC(Enterprise Central Component)系统中,Web Service被广泛用于集成和交互,尤其在跨系统的业务流程自动化中发挥重要作用。 在SAP ECC 6.0 SP14之后的版本中,发布Web Service服务主要涉及以下步骤: 1...

    Web Service与下一代Internet Java的未来发展

    Web Service与传统的COM(Component Object Model)组件进行了对比,两者都支持组件重用和安全性,但Web Service通过HTTP/SOAP/XML实现了更高级别的位置透明性和跨平台能力。COM主要依赖于二进制接口和注册表,而Web...

    Activity通信源码

    Activity之间的通信、Activity与Fragment以及Activity与Service的交互是构建复杂应用程序的基础。本文将深入解析这些通信方式的源码,帮助开发者理解其工作原理。 1. **Activity之间的通信**: 在Android中,...

    用Delphi实现Web Service的简单示例

    在IT领域,Web Service是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的通信协议,它允许不同的应用程序之间进行数据交换。在这个"用Delphi实现Web Service的简单示例"中,我们将探讨如何使用Delphi这一强大的...

Global site tag (gtag.js) - Google Analytics