之前讲过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对象

    代码如下

wKioL1eytcKx7SDAAAEnX_KcMuQ523.png-wh_50

wKiom1eytcPRwUVnAAECqVjRsN4159.png-wh_50

wKioL1eytdSSQNR4AADd-YGgF6Q561.png-wh_50

wKioL1eytdSC5qoDAAGtbVZwNic454.png-wh_50

wKiom1eytdWwwn1zAAGTxEE3mck524.png-wh_50

wKiom1eytdaj-m53AAG3uh-B53M425.png-wh_50

wKioL1eytdfDteZyAAGBna8LwIM570.png-wh_50

wKioL1eytdeBk5kRAAGmAYLRqaU238.png-wh_50

wKiom1eytdjTFytxAAG4yNbsQk8672.png-wh_50

wKiom1eytdmSmMwLAAGxTtZl8e8401.png-wh_50

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