之前讲过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对象
代码如下
注意一定要先运行服务端再客户端
本文出自 “11828641” 博客,请务必保留此出处http://11838641.blog.51cto.com/11828641/1839224
原文地址:http://11838641.blog.51cto.com/11828641/1839224