Android模块化Discovery1.4.1发布,不需要相互依赖的多模块按顺序初始化轻松实现。

Posted 学习Android的第1024天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android模块化Discovery1.4.1发布,不需要相互依赖的多模块按顺序初始化轻松实现。相关的知识,希望对你有一定的参考价值。

Discovery

通过在下层模块中创建接口(或抽象类)并标记@Discoverable注解,然后在其它上层模块中创建实现类并标记@Implementation注解,就可以在工程中的任意模块中通过Discoveries类获取该接口或抽象类的实例,辅助android开发者在模块之间访问数据。

文末有福利!!!

原理及同类框架的差异

  • Discovery会在编译时扫描每个类,并将所有标记的类的信息通过ASM注册到Discoveries类中。
  • 相比ARouter等路由框架的服务发现功能,Discovery主要功能在编译期间工作,不会在运行时扫描dex,有更好的性能。
  • 相比ServiceLoaderDiscovery支持抽象类,以及可以获取实现类的class对象,可以适配更丰富的其它框架。

安装

  1. 在根模块的build.gradle的适当位置添加以下代码:

    buildscript 
       repositories 
           ...
           mavenCentral()
       
       dependencies 
           ...
           //添加Discovery插件
           classpath("cn.numeron:discovery.plugin:latest_version")
       
     
    
  2. 在业务模块的build.gradle文件中添加以下代码:

    api("cn.numeron:discovery.library:latest_version") 
    
  3. 在主模块的build.gradle文件中添加以下代码:

    plugins 
        id("com.android.application")
        ...
        //应用Discovery插件
        id("discovery")
     
    

多模块工程顺序初始化示例

  1. 在基础模块中创建一个接口,并标记Discoverable注解:
@Discoverable
interface Initializer 

    fun init(application: Application)

 

2.其它需要初始化的模块中创建Initializer的实现类,并标记Implementation注解,以及指定order的值,order的数值越小,优先级越高:

//需要初始化的A模块
@Implementation(order = 0)
class AModuleInitializer: Initializer 
    override fun init(application: Application) 
        //init a module
    
 
//需要初始化的B模块
@Implementation(order = 10)
class BModuleInitializer: Initializer 
    override fun init(application: Application) 
        //init b module
    
 

3.在ApplicationonCreate方法中获取所有Initializer的实例,并遍历它们,调用init方法:

class MyApplication: Application() 

    override fun onCreate() 
        //获取所有IInitiator的实现,并执行init方法
        val initializerList = Discoveries.getAllInstances<IInitializer>()
        initializerList.forEach 
            //order数值小的实现类优先调用
            it.init(this)
        
    

 

功能扩展

可以看到,Discovery只是帮助开发者处理了服务的注册与发现的问题,具体要怎么实现,全由开发者自行决定,比如搞个有向无环图顺序启动之类的功能,都可以随意扩展。

功能扩展

可以看到,Discovery只是帮助开发者处理了服务的注册与发现的问题,具体要怎么实现,全由开发者自行决定,比如搞个有向无环图顺序启动之类的功能,都可以随意扩展。

最后

有小伙伴私信问Compose的问题,好不好用啊,现在要不要学啊?

其实答案很简单,自从谷歌2019年公布了声明式UI框架Jetpack Compose后,两年多的时间,各种大力宣传,和大量资源的倾斜,API功能都趋于稳定了。

至于好不好用,各种用过的同行都是持肯定态度的。优势大概就是这四点:

强大的工具和直观的Kotlin API
简化并加速了Android上的UI开发
可以帮助开发者用更少更直观的代码创建View
有更强大的功能,以及还能提高开发速度

这么大的优势,毋庸置疑,肯定是要学的嘛,而且越快掌握越好。别等刀架到脖子上了,才去练金钟罩。

至于怎么快速上手,可以给大家免费分享一份**《Jetpack Compose 完全开发手册》**,手把手教大家从入门到精通。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
有需要的话可以扫描下面二维码回复JJ免费领取↓↓↓

第一章 初识 Jetpack Compose

  • 为什么我们需要一个新的UI 工具?

  • Jetpack Compose的着重点

    加速开发
    强大的UI工具
    直观的Kotlin API

  • API 设计

  • Compose API 的原则
    一切都是函数
    顶层函数(Top-level function)
    组合优于继承
    信任单一来源

  • 深入了解Compose
    Core
    Foundation
    Material

  • 插槽API

第二章 Jetpack Compose构建Android UI

  • Android Jetpack Compose 最全上手指南
    Jetpack Compose 环境准备和Hello World
    布局
    使用Material design 设计
    Compose 布局实时预览
    ……

  • 深入详解 Jetpack Compose | 优化 UI 构建
    Compose 所解决的问题
    Composable 函数剖析
    声明式 UI
    组合 vs 继承
    封装
    重组
    ……

  • 深入详解 Jetpack Compose | 实现原理
    @Composable 注解意味着什么?
    执行模式
    Positional Memoization (位置记忆化)
    存储参数
    重组
    ……

第三章 Jetpack Compose 项目实战演练(附Demo)

  • Jetpack Compose应用1
    开始前的准备
    创建DEMO
    遇到的问题

  • Jetpack Compose应用2
  • Jetpack Compose应用做一个倒计时器
    数据结构
    倒计时功能
    状态模式
    Compose 布局
    绘制时钟

  • 用Jetpack Compose写一个玩安卓App
    准备工作
    引入依赖
    新建 Activity
    创建 Compose
    PlayTheme
    画页面
    底部导航栏
    管理状态
    添加页面

  • 用Compose Android 写一个天气应用
    开篇
    画页面
    画背景
    画内容
    ……

  • 用Compose快速打造一个“电影App”
    成品
    实现方案
    实战
    不足
    ……

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
有需要的话可以扫描下面二维码回复JJ免费领取↓↓↓

以上是关于Android模块化Discovery1.4.1发布,不需要相互依赖的多模块按顺序初始化轻松实现。的主要内容,如果未能解决你的问题,请参考以下文章

Android--开发:由模块化到组件化

Android 开发:由模块化到组件化

Android 开发:由模块化到组件化

Android 开发:由模块化到组件化

发邮件yagmail模块

python发邮件