跨进程绑定Service

之前讲过Service有远程服务,也就是不同程序之间也可以通过Service联系起来。跨进程的绑定Service可以通过aidl接口实现。

下面运用一个例子程序

提供Service里的方法和数据的程序叫做服务端,获取和运用Service里的方法和数据的程序叫客户端。

先创建两个安卓程序,一个作为服务端,一个作为客户端。

先对服务端进行操作,在服务端创建一个class类,然后在我的电脑的eclipse的项目存储目录下,找到该class并把后缀名改为 .aidl 然后回到开发程序中刷新一下,就会发现刚才所创建的java类已经变成了aidl类,接着就可以在该aidl类中写一些方法,如要传输对象,则需要创建一个对象的类,和该对象的一个aidl类,并且都要实现序列化接口。.aidl类和student即实体类要复制粘贴到客户端才能使用。

要使用AIDL,Service需要以aidl文件的方式提供服务接口,AIDL工具将生成一个相应的java接口,并且在生成的服务接口中包含一个功能调用的stub服务桩类。Service的实现类需要去继承这个stub服务桩类

接下来就要创建一个类来继承Service并实现其中的方法,主要的就是返回一个IBinder对象的onBind方法,但是IBinder接口不能直接用,需要写一个继承Binder,由于之前就写了一个aidl对象,所以可以继承这个stub服务类。

Service类记得要注册,而且还要添加action属性

在客户端,开启Service时要通过setAction来启动,因为Service在另一个程序,所以用显性的话会找不到,只能通过隐性来启动

bindService(service, conn, flags),绑定Service有三个参数,第一个是需要启动的服务,第二个是ServiceConnection,第三个是BIND_AUTO_CREATE(固定写法),其中第二个参数,服务器连接,需要写一个类来实现ServiceConnection接口,通过ServiceConnection对象的相关方法可以得到Service对象

代码如下

注意一定要先运行服务端再客户端

时间: 2024-12-18 15:46:16

跨进程绑定Service的相关文章

Android学习笔记二十六.跨进程调用Service(AIDL Service)

跨进程调用Service(AIDL Service) 一.AIDL Service 1.什么是AIDL Service? AIDL,即Android Interface Definition Language.是Android用于定义远程接口,AIDL接口定义语言的语法比较简单,这种接口定义语言并不是真正的编程语言,它只是定义两个进程之间的通信接口.AIDL的语法与Java接口很相似,但存在如下几点差异: (1)AIDL定义接口的源代码必须以.aidl结尾; (2)AIDL接口中用到数据类型,除

Android -- 跨应用绑定service并通信

之前记录过跨应用绑定service:http://blog.csdn.net/gaopeng0071/article/details/46049929,那么绑定后如何进行通信呢,下面我们就来学习下. 第一步, 需要修改service1项目中aidl,增加一个方法. package com.example.service1.aidl; interface IMyService { void basicType(); void setName(String name); } setName用于存储n

Android -- 跨应用绑定service(AIDL)

之前一章记录了跨应用启动service,之前学习过startService于bindService的区别及用法. 使用bindService方法,activity需要service返回一个Binder对象,那么如果是两个应用怎么实现呢,这里就涉及到了一个AIDL的概念. AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication,

Abdroid---44---使用AIDL Service 实现跨进程调用Service

 为了实现跨进程通信(interprocess communication 简称 IPC),Android提供了AIDL Service. AIDL 是一种IDL语言,用于生成可以在Android设备上两个进程之间进行通信的代码 如果在一个进程中药调用另一个进程中对象的操作,就可以使用AIDL生成可序列化的参数. AIDL是面向接口的 与绑定本地Service不同的是,本地Service的onBind方法会直接把IBinder对象本身传给客户端的ServiceConnection 的onSe

跨进程调用Service(AIDL Service)

1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 icp:interprocess communication :内部进程通信 2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述: --1.Create

跨应用绑定service

绑定service需要在上一讲中,新创建一个AIDL. // AppServiceRemoteBinder.aidl package com.example.yabushan.aidsservice; // Declare any non-default types here with import statements interface AppServiceRemoteBinder { /** * Demonstrates some basic types that you can use

入门篇:10.Android中AIDL(安卓接口定义语言)跨应用操作Service

Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口.我们知道4个Android应用程序组件中的3个(Activity.BroadcastRec

Android四大组件应用系列——使用ContentProvider实现跨进程通讯

一.问题描述 如何在Android中实现不同应用之间的通讯(既跨进程进行调用)?Android提供了多种实现方式,使我们可以实现跨进程访问Activity.通过ContentProvider跨进程访问其他应用的数据.通过Broadcast可以向android系统中所有应用程序发送广播.使用AIDL实现跨进程的Service.下面我们就使用ContentProvider实现跨进程访问数据,并可对数据进行增.删.改.查 二.应用实现 使用ContentProvider实现数据共享,主要是共享应用的S

Android的服务(Service)(三)Service客户端的绑定与跨进程

继续上篇的分析,接下来是第三个问题"Service与其客户端的绑定如何实现,即跨进程调用问题" (一).Service的生命周期 (二).Service的自动重启问题 (三).Service与其客户端的绑定如何实现,即跨进程调用问题. 服务于客户端的绑定通过binder来实现的,就是客户端去bind服务.来看看ContextImpl的bindServiceCommon方法 private boolean bindServiceCommon(Intent service, Service