欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jetpack的 App Startup库的使用简介

程序员文章站 2022-06-08 11:06:21
...

Jetpack的 App Startup库的使用简介

App Startup库的介绍

App Startup库提供了一种直接,高效的方法来在应用程序启动时初始化组件。库开发人员和应用程序开发人员都可以使用“应用程序启动”来简化启动顺序并显式设置初始化顺序。

App Startup允许您定义共享单个内容提供程序的组件初始化程序,而无需为需要初始化的每个组件定义单独的内容提供程序。这可以大大缩短应用程序的启动时间。

实现原理

Jetpack的 App Startup库的使用简介

可以看到,一个应用程序的执行顺序是这个样子的。首先调用Application的attachBaseContext()方法,然后调用ContentProvider的onCreate()方法,接下来调用Application的onCreate()方法

App Startup内部也创建了一个ContentProvider,并提供了一套用于初始化的标准。然后对于其他第三方库来说,你们就不需要再自己创建ContentProvider了,都按App Startup提供的这套标准进行实现就行了,App Startup可以保证我们的库在App启动之前都成功进行初始化

解决的问题

  • 解决了在引入了非常多的第三方库,Application里的代码非常凌乱的问题

  • 使库的开发者不需要在自己的库里借助ContentProvider来初始化库,从而提升应用的启动时间

  • 让库的初始化可以在Application的onCreate()方法之前完成初始化工作

.

App Startup库的使用

1. build.gradle文件中添加依赖

dependencies {
    implementation "androidx.startup:startup-runtime:1.0.0"
}

2. 实现App Startup库的Initializer接口

class MyInitializer implements Initializer<Unit> {

    @Override
	//进行库的初始化操作
    public MyInitializer create(Context context) {

       //在这里进行第三方库的初始化
		XXXX.initialize(context)
    }

    @Override
	//表示当前要初始化的库是否还依赖于其他的Initializer,如果有的话,就在这里进行配置
    public List<Class<Initializer<?>>> dependencies() {
        // 当前库无第三方库依赖
        return emptyList();//返回一个看的集合
    }

}

3. 将定义好的Initializer配置到AndroidManifest.xml中

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">

	    <meta-data  android:name="com.myclass.MyInitializer"
	          android:value="androidx.startup" />
</provider>

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

到这里App Startup库的使用就基本结束了,下面介绍一下任何手动初始化组件。

.

手动初始化第三方库(延迟初始化)

1. 禁用单个库的自动初始化

要禁用单个库的自动初始化,请<meta-data>从清单中删除该库的初始化程序的条目

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

在需要初始化的时候手动去初始化,如下所示:

AppInitializer.getInstance(context)
    .initializeComponent(MyInitializer.class);

2. 禁用所有库的自动初始化

要禁用所有自动初始化,请InitializationProvider从清单中删除的整个条目

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove" />

在需要初始化的时候手动去初始化,如下所示:

AppInitializer.getInstance(context)
    .initializeComponent(MyInitializer.class);

到这里 App Startup库的使用和功能介绍就全部结束了,想了解更多细节请到App Startup库的官网查看,谢谢你的阅读!

相关标签: android java