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
分享到:
相关推荐
将各种组件组装在一起以创建业务解决方案服务:创建用于远程访问组件和组合功能的界面组合,服务及其与组件的关系是在动态描述符文件中定义的,因此可以实现每个组件,而无论其如何与其他组件通信。这个框架是关于...
如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了。组件间通信的其中一种优等选择就是使用服务,在ng1里就有了广泛使用,而ng2保持了服务的全部...
DCOM(Distributed Component Object Model 分布式组件对象模型) J2EE WWW (2)Web Service 是一种用 URI 标识的软件应用,它的接口和绑定可以通过 XML 文档定义、描述和发现。Web Service 支持通过基于 Internet ...
在我这里,我选择将xml直接转换为json,以便后续javascript应用的处理。... using System.ComponentModel; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using Syst
面向服务组件将面向服务的概念引入组件模型中,支持松耦合的面向服务应用软件的开发。本文提出一种基于spring框架的轻量级面向服务组件框架SSCF(Spring-...该框架简化了面向服务组件的开发,与SCA(service component
系统适配器SA负责与IUT的通信细节,即抽象服务原语(Abstract Service Primitive,ASP)和协议数据单元PDU(Protocol Data Unit,PDU)的发送和接收。编解码器CD负责TTCN-3数据和ASP/PDU之间的双向转换。组件管理器...
service不包含可见的用户界面,而是在后台无限地运行可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信 broadcast receiver是一个接收广播消息并作出回应的component,broadcast ...
--Shine Chen 1 进程内 COM 组件的实现 1 实验目的 Microsoft 的 COM(Component Object Model)是目前比较流行的软件开发技术之一,它是基于组件 模型的一种规范。本实验实际演示一个 COM 组件的应用,加深对 COM ...
3.3 任务通信 3.3.1 邮箱 3.3.2 队列 3.3.3 管道 3.4 任务同步 3.4.1 信号量(semaphores) 3.4.2 事件集 3.5 定时器 …… 2、Nucleus_PLUS源码分析.pdf 内容 第一章.介绍手册的目的 关于Nucleus PLUS Nucleus ...
运行ng generate component component-name生成一个新的组件。 您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。 建造 运行ng build来构建项目。 构建工件将存储在dist/目录中...
10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:...
10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:...
10.1.3 绑定本地Service并与之 通信 377 10.1.4 Service的生命周期 381 10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383...
代码脚手架运行ng generate component component-name生成一个新的组件。 您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。建造运行ng build来构建项目。 构建工件将存储在...
10.1.3 绑定本地Service并与之 通信 377 10.1.4 Service的生命周期 381 10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383 10.2.4 客户端...
container作为component的容器,负责与redux、service通信,获取、保存、加工数据。 react-navigation用于导航和管理页面(container) 4. 开发指南 4.1 开发方式 使用android模拟器进行开发和调试,原因基于以下...
用于网络设备和应用程序的通信。PowerTCP SNMP Tool是一个控件集合,它通过SNMPv1或SNMPv2以及ASN.1标准来管理网络设备和应用程序,具有最高的标准兼容性和速度。它包含一个Agent Control和一个Manager Control——...
Intent是Android中的重要组件,可以被认为是不同组件之间通信的"媒介"或者"信使" 。使用它可以启动Activity,Service还可以发起一个广播(Broadcast)。Intent对象 由Action、Data、Category、Component和Extra组成...