欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android-SPI学习笔记

程序员文章站 2022-03-27 08:41:58
概述spi(service provider interface, 服务提供方接口),服务通常是指一个接口或者一个抽象类,服务提供方是对这个接口或者抽象类的具体实现,由第三方来实现接口提供具体的服务。...

概述

spi(service provider interface, 服务提供方接口),服务通常是指一个接口或者一个抽象类,服务提供方是对这个接口或者抽象类的具体实现,由第三方来实现接口提供具体的服务。通过解耦服务与其具体实现类,使得程序的可扩展性大大增强,甚至可插拔。基于服务的注册与发现机制,服务提供者向系统注册服务,服务使用者通过查找发现服务,可以达到服务的提供与使用的分离。

可以将 spi 应用到 android 组件化中,很少直接使用 spi,不过可基于它来扩展其功能,简化使用步骤。

基本使用

1. 在低层 module_common 中声明服务

2. 在上层 module 中实现服务

3. 在其它上层 module 中使用服务

serviceloader.load

serviceloader 的原理解析从 load 方法开始:

serviceloader实例创建

lazyiterator

serviceloader 实现了 iterable 接口,可以使用 iterator/foreach 方法来迭代元素,其 iterator 方法实现如下:

上面使用了懒加载的方式,不至于一开始便去加载所有服务实现,否则反射影响性能。lazyiterator 类如下:

总结

serviceloader 的原理比较简单,其实就是使用一个懒迭代器,用时加载的方式可以减少性能损耗,在加载新服务的时候通过解析服务配置文件获取配置的服务,然后通过类加载器去加载配置的服务实现类,最后将其实例返回。

spi的优点

  • 只提供服务接口,具体服务由其他组件实现,接口和具体实现分离。

spi的缺点

  • 配置过于繁琐
  • 具体服务的实例化由serviceloader反射完成,生命周期不可控
  • 当存在多个实现类对象时,serviceloader只提供了一个iterator,无法精确拿到具体的实现类对象
  • 需要读取解析配置文件,性能损耗

以上就是android-spi学习笔记的详细内容,更多关于android-spi的资料请关注其它相关文章!

相关标签: Android spi