AndroidServiceProvider是为了解决模块化过程中各模块服务统一获取的难题而产生的,具体情况请参照这篇文章

Android模块化中的服务发现机制

注意混淆

这里特别强调,所有注册的类都需要避开混淆,因为这里是通过反射实现的

依赖引入

api 'com.jianglei:serviceprovider:0.1'

基本使用

以源码中的示例代码为例讲解

首先看下当前依赖情况:

当前需求:获取各模块名称

1. 在底层模块编写服务接口

比如在bottomlibrary模块中增加一个服务:

public interface IModuleName {

/**

* 获取所属module的名称

* @return module的名称

*/

String getModuleName();

}

2.各模块实现自己的服务

比如在businessone模块中实现如下:

public class OneModuleName implements IModuleName {

@Override

public String getModuleName() {

return "businessone";

}

}

在businesstwo模块实现如下:

public class TwoModuleName implements IModuleName {

@Override

public String getModuleName() {

return "businesstwo";

}

}

3. 各模块暴露自己提供的服务

比如在businessone的AndroidManifest.xml中定义一个meta-data:

android:value="module_name"/>

比如在businesstwo模块中:

android:value="module_name"/>

注意,请记住此处的value:module_name,同一个服务必须相同

4. 注册服务

推荐在Application中调用,越早越好:

public class MyApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

//注意,此处的“module_name"必须和AndroidManifest.xml中注册的value的值相同,

//此处的IModuleName.class是用来保证各模块注册的服务都是它的实现,否则会报错

JlServiceProvider.register(this,"module_name", IModuleName.class);

}

}

5.获取所有服务

经过上面的步骤,我们已经能成功的拿到所有模块的服务了,比如我在app模块的MainActivity中:

//此处必须保证”module_name"注册的服务是IModuleName的实现,否则强转会报错

List moduleNames = JlServiceProvider.getServices("module_name");

StringBuilder sb = new StringBuilder("目前注册的模块有:\n");

for(IModuleName moduleName : moduleNames){

sb.append(moduleName.getModuleName()).append("\n");

}

TextView tvContent = findViewById(R.id.tvContent);

tvContent.setText(sb.toString());

android 提供服务,GitHub - FamliarMan/AndroidServiceProvider: 为模块化提供的一个服务发现库...相关推荐

  1. android module中获取 app_Android模块化中的服务发现机制

    code小生 一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:低情商的大仙 链接:https://www.jianshu.com/p/de432a82e ...

  2. Android 基于注解IOC组件化/模块化的架构实践

    当前参与的项目历史也很久远,第一行代码据说是写于2014年的某一天,那时Android用的ide还是Eclipse.那时Android还没有很好的架构指导(mvp.mvvm).那时Android最新的 ...

  3. 开源需自立!Android、GitHub、Apache全线告急!

    作者 | 胡巍巍&伍杏玲 责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 华为四面楚歌,"破窗效应"爆发! 继5月16日美国商务部工业与安全局(BIS)将华 ...

  4. GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库

    GitHub近日宣布了Electron 1.0这个里程碑的发布.此外,GitHub也为收费计划提供了一种新的定价模式,包括无限制的私有代码库. \\ Electron经历了前两年的闭源开发,以及后两年 ...

  5. Android使用Github Actions持续集成并自动上传apk到蒲公英App内测分发平台(含证书密码脱敏)

    目录 1.前言 2.Github Actions持续集成 3.上传apk到蒲公英 4.Gradle配合Github Actions的Secret使用 4.1设置Github Actions Secre ...

  6. 2020 Android 大厂面试-插件化、模块化、组件化,移动开发工程师的岗位职责

    替换了主工程context中LoadedApk的mResource对象 将新的Resource添加到主工程ActivityThread的mResourceManager中,并且根据Android版本做 ...

  7. 2020 Android 大厂面试-插件化、模块化、组件化,android开发环境的搭建视频

    if (Constants.COMBINE_RESOURCES) { //插件和主工程资源合并时需要hook住主工程的资源 Resources resources = ResourcesManager ...

  8. 【Android】GitHub Android 开源项目汇总

    参考网址:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上. ...

  9. android 提供的方法,Android编程之创建自己的内容提供器实现方法

    本文实例讲述了Android编程之创建自己的内容提供器实现方法.分享给大家供大家参考,具体如下: 我们学习了如何在自己的程序中访问其他应用程序的数据.总体来说思 路还是非常简单的,只需要获取到该应用程 ...

最新文章

  1. Swift3.0语言教程使用编码创建和初始化字符串
  2. python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...
  3. stm32之USART/UART应用实例(详细)
  4. IDEA 集成Lombok 插件-使用插件
  5. 在iOS开发中使用FMDB
  6. java 泛型 泛型擦除(type erasure)
  7. 浙大 PAT b1029
  8. html 文字过多如何显示,当页面文字过多时,怎么用css使超出部分显示省略号?(单/多行代码演示)...
  9. Linux kernel中网络设备的管理
  10. 二十套Java项目源码
  11. 电子信息技术专业名词中英文对照(三)
  12. 如何在Mac Finder中查找/Usr 路径?
  13. 用python写一个NC(八)
  14. 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分
  15. thinksns java_社交系统ThinkSNS+技术概要
  16. 刚子扯谈:未完待续的微信5.0
  17. 基于Bootstrap的超酷jQuery开关按钮插件
  18. 一元函数微分学的几何与物理应用
  19. 怎样“管理”你的上司?
  20. Remind define after declaration

热门文章

  1. Apache Maven 安装与配置-修改源
  2. centos7httpd服务的搭建
  3. tf.get_variable
  4. Computer OS系统基本原理
  5. HBM2E Flashbolt--提升人工智能的算力
  6. NVIDIA GPU的快速傅立叶变换
  7. Docker Buildx插件
  8. Python分析离散心率信号(中)
  9. 2021年大数据Hadoop(四):Hadoop发行版公司
  10. Uncaught SyntaxError: Unexpected token