栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Jetpack新成员,App Startup

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jetpack新成员,App Startup

介绍

App Startup是一个可以用于加速App启动速度的一个库。

出现的原因

以前初始化第三方库会在Application的onCreate中。

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        LitePal.initialize(this)
        AAA.initialize(this)
        BBB.initialize(this)
        CCC.initialize(this)
		DDD.initialize(this)
		EEE.initialize(this)
    }
    ...
}
复制代码

现在越来越多的库在ontentProvider来初始化。

class MyProvider : ContentProvider() {

    override fun onCreate(): Boolean {
        context?.let {
            LitePal.initialize(it)
        }
        return true
    }
    ...
}

复制代码

这样写逻辑不会有什么问题。

但是ContentProvider越来越多,启动就慢了。

关于ContentProvider的耗时,Google官方也有给出一个测试结果:

原理

把这些库放置到一个ContentProvider。

    以前:

    现在:

使用
    引入App Startup。
dependencies {
    implementation "androidx.startup:startup-runtime:1.0.0-alpha01"
}
复制代码
    定义一个用于执行初始化的Initializer,并实现App Startup库的Initializer接口。
class LitePalInitializer : Initializer {

    override fun create(context: Context) {
        LitePal.initialize(context)
    }

    override fun dependencies(): List>> {
        (1)依赖其他Initializer
        return listOf(OtherInitializer::class.java)
        (2)不依赖其他Initializer
         return emptyList()
    }

}
复制代码

Initializer接口要求重现两个方法。

在create()方法中,我们去进行之前要进行的初始化操作就可以了,create()方法会把我们需要的Context参数传递进来。

dependencies()方法表示,当前的LitePalInitializer是否还依赖于其他的Initializer,如果有的话,就在这里进行配置,App Startup会保证先初始化依赖的Initializer,然后才会初始化当前的LitePalInitializer。不依赖的话,直接返回emptyList()。

    将它配置到AndroidManifest.xml当中。

	
		
	
	


复制代码

这里的配置是有比较严格的格式要求的

meta-data中的android:name部分我们需要指定成我们自定义的Initializer的全路径类名,其他部分都是不能修改的,否则App Startup库可能会无法正常工作。

使用小结:

    引入App Startup的库。自定义一个用于初始化的Initializer。将自定义Initializer配置到AndroidManifest.xml当中。
延迟初始化

	
		
	
	


复制代码

区别仅仅在于,这里在LitePalInitializer的meta-data当中加入了一个tools:node="remove"的标记。

这个标记用于告诉manifest merger tool,在最后打包成APK时,将所有android:name是com.example.LitePalInitializer的meta-data节点全部删除。

等需要初始化的时候,调用这个方法。

AppInitializer.getInstance(this)
    .initializeComponent(LitePalInitializer::class.java)
复制代码
总结:

    原理就是将多个ContentProvider压缩成一个。

    这个组件是给库的开发者使用的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731315.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号