【Android】之 App Startup 的使用及浅析

前言

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

平时开发中,大部分的第三方都需要在 Application 中进行初始化,但是有些库则会借助 ContentProvider 来初始化,以便使自己的库引入成本更低,代码侵入性更低,使用更加简便。

但是,一旦项目引入了使用 ContentProvider 进行初始化的库越来越多,那么应用的启动速度将会越来越慢,因为每个 ContentProvider 的初始化都是比较耗时的操作。

而 App Startup,它可以将所有用于初始化的 ContentProvider 合并成一个,从而使 App 的启动速度变得更快。实际上,App Startup 内部也创建了一个 ContentProvider,并提供了一套用于初始化的标准。

如果你在设计一款第三方库,建议使用 App Startup 来初始化你的库,而非 ContentProvider。

基本使用

下面来介绍 App Startup 的使用。

步骤一:引入依赖

implementation "androidx.startup:startup-runtime:1.1.1"

步骤二:创建 Initializer 类

class MainInitializer : Initializer<Unit> {

    override fun create(context: Context) {
        // todo 执行库的初始化操作
    }

    /**
     * 表示当前的 Initializer 是否还依赖于其他的 Initializer,如果有的话就在这里进行配置,
     * App Startup 会保证先初始化依赖的 Initializer,然后才会初始化当前的 LitePalInitializer
     */
    override fun dependencies(): List<Class<out Initializer<*>>> = emptyList()

}

步骤三:在 AndroidManifest.xml 中声明

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data
        android:name="com.example.demoproject.app.MainInitializer"
        android:value="androidx.startup" />
</provider>

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

手动初始化

我们可以在 meta-data 中加入 tools:node="remove" 使对应的 Initializer 失效,例如:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
</provider>

这样,WorkManagerInitializer 将不会执行 onCreate 方法,因此,如果我们想要执行 WorkManagerInitializer 的初始化,需要手动调用 WorkManager 的初始化方法。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一场雪ycx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值