StartUp技术实践
最近翻看Google的Android开发平台,想更新一下自己脑子里的JetPack相关技术信息,审视一下自己目前使用的技术是不是又该过时了或者又出来了什么新的技术了,然后发现了这个StartUp。
当然,开发者使用一项新的工具或者代码库,前提是确定其稳定性,介于StartUp于今年(2020年)6月10号才出的,目前刚出了最新测试版 1.0.0-beta01,读者如果处于好奇可以随本文一起来了解StartUp。
StartUp是干什么和解决什么问题的
根据Google文档介绍,StartUp是JetPack的新成员,是为了App的启动提供简单、高效的初始化的一套方案。
StartUp之前,最有效的组件或者库文件的初始化逻辑,是通过提供ContentProvider来完成初始化逻辑(不明白为什么使用ContentProvider来进行初始化或者不理解应用启动流程的读者请先自行百度),而StartUp就是根据这样一种策略而提供的更优化的方案。StartUp提供了一个专门的ContentProvider来完成所有初始化的逻辑,避免了开发者自己手动去创建ContentProvider,也避免每一个库都依赖一个单独的ContentProvider进行初始化,从而提高应用启动的效率。
StartUp怎么使用
1、在builder.gradle添加StartUp依赖
implementation "androidx.startup:startup-runtime:1.0.0-beta01"
2、实现Initializer接口
创建初始化逻辑实现类,例如:

上面的LibraryA ,就是需要初始化的类对象

同理LibraryB 也是需要初始化的类对象,而dependencies()的返回值,表示LibraryB的初始化在LibraryA初始化完成之后。
3、在Manifest当中注册StartUp初始化组件

完成以上步骤,然后编译运行,应用启动后就会在Application启动前,完成StartUpLibraryA、StartUpLibraryB的初始化工作了。上面是初始化执行是默认在Application启动前完成,顺序是先A后B,由初始化实现Initializer接口的dependencies()返回来决定。也可以将初始化改为手动调用来实现。
4、手动初始化(即延迟初始化)
按上面步骤,前两步逻辑一样,只是第三步,在注册Manifest的时候,在meta节点添加一个属性

新增的这个属性,会让StartUpLibraryB从初始化清单中移除默认执行,然后在需要初始化的地方调用以下代码来执行初始化:

好了,以上就是StartUp的技术实现了。