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
,有更好的性能。 - 相比
ServiceLoader
,Discovery
支持抽象类,以及可以获取实现类的class
对象,可以适配更丰富的其它框架。
安装
-
在根模块的
build.gradle
的适当位置添加以下代码:buildscript repositories ... mavenCentral() dependencies ... //添加Discovery插件 classpath("cn.numeron:discovery.plugin:latest_version")
-
在业务模块的
build.gradle
文件中添加以下代码:api("cn.numeron:discovery.library:latest_version")
-
在主模块的
build.gradle
文件中添加以下代码:plugins id("com.android.application") ... //应用Discovery插件 id("discovery")
多模块工程顺序初始化示例
- 在基础模块中创建一个接口,并标记
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.在Application
的onCreate
方法中获取所有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发布,不需要相互依赖的多模块按顺序初始化轻松实现。的主要内容,如果未能解决你的问题,请参考以下文章