Android 动态服务SPI的实现
声明:此处所谓的SPI是指Service Provider Interfaces,属于Java中动态加载Service的一项技术。
而非硬件编程中的SPI,那是Serial Peripheral Interface。
本文参照了元亨利贞o这位博主的博客,表示感谢。
一、概念
SPI即Service Provider Interfaces
。Java的接口可以有多种实现方式,为便于代码灵活,有事需要动态加载实现类。这就是SPI机制. SPI机制非常简单, 步骤如下:
定义接口和接口的实现类
创建resources/META-INF/services目录
在上述Service目录下,创建一个以接口名(类的全名) 命名的文件, 其内容是实现类的类名 (类的全名)。
在services目录下创建的文件是
com.binglumeng.spidemo.IAnimal
文件中的内容为Animal接口的实现类, 可能是com.binglumeng.spidemo.Dog
在java代码中使用ServcieLoader来动态加载并调用内部方法.
二、Android中使用SPI
Android上使用SPI的步骤和Java中是一样的. 下面给出实例:
- (1) 创建spi接口, 如下:
|
|
- (2) 实现spi接口, 如下:
|
|
(3) 创建目录
resources/META-INF/services
目录(4) 创建以接口命名的文件(
com.binglumeng.spidemo.IAnimal
), 内容为接口的实现类. 下面是spi的描述文件:(5) 使用ServiceLoader动态查找接口的实现并使用.
下面是在Activity中查找接口的实现, 并调用接口的方法, 代码如下:
|
|
点击按钮会输出下面信息:
|
|
。◕‿◕。 …….