安卓自学笔记

第一章:基础知识

第九节:AIDL的理解与使用

AIDL:安卓接口定义语言

跨应用启动Service

 

创建一个新项目添加一个Service类并添加onCreate和onDestroy方法,如图:

并在启动类中的onCreate和onDestroy方法分别写上启动和关闭服务代码,如图:

要实现跨应用启动Service就再创建一个Module来启动已经写好的SerivceDemo。

在新Module里的主页面添加两个按钮,一个用来跨应用启动服务,一个用来关闭。

若需要实现跨应用启动Service的功能,必须使用显式Intent来操作

通过Intent的setComponent方法来设置一个主键名字,来指明要要启动的Intent,参数是被启动服务的包名与类名。

如图:

如果需要在Service内接收从别的应用传过来的数据,则需要再补充onStartCommand方法

 

跨应用绑定Service

 

对Service所在的项目新建一个AIDL文件后自动生成相关的类。再去Service类的onBind方法改写返回值。如图:

给另一个项目的主页面新增两个按钮,用来跨应用绑定服务和解除绑定。

并为其写上事件代码,如图:

 

成功绑定后就可以进行通讯

 

首先在AIDL文件中增加一个接口,如图

并在Service类中使用,如图

再为Service类写一个循环输出用来测试通讯,一直输出默认的数据直到另一个应用传入了其他数据来替代原本的数据,如图:

另一个应用中增加一个同步数据的按钮和一个文本输入框,用来输入替代Service内部的测试数据的文本,并且通过Binder来执行远程函数,这时候应该先将AIDL这个文件夹复制到另一个应用中,确保其包名一致。两个应用的目录结构和同步数据的按钮相关代码如图:

运行效果如图: