Jetpack - App Startup启动器

1. 概念

The App Startup library provides a straightforward, performant way to initialize components at application startup. Both library developers and app developers can use App Startup to streamline startup sequences and explicitly set the order of initialization.

Instead of defining separate content providers for each component you need to initialize, App Startup allows you to define component initializers that share a single content provider. This can significantly improve app startup time.
Startup是一种程序启动时简单高效的初始化组件的库。

2.使用

2.1 依赖

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

2.1 Initializer

定义一个实现Initializer接口的类,重写两个方法。
create:进行初始化工作
dependencied:当进行本项初始化的时候,需要的依赖项。优先于create方法执行。

// Initializes WorkManager.
class WorkManagerInitializer implements Initializer<WorkManager> {

    @Override
    public WorkManager create(Context context) {
        Configuration configuration = Configuration.Builder().build();
        WorkManager.initialize(context, configuration);
        return WorkManager.getInstance(context);
    }

    @Override
    public List<Class<Initializer<?>>> dependencies() {
        // No dependencies on other libraries.
        return emptyList();
    }
}

我们可以建立多个实现类,他们之间还可以有依赖关系,如A–>B A依赖B组件,就会先执行B组件,然后在执行A组件。

2.2 设置清单文件

applicationId 应用程序包
name:固定包名不能更改
node:The tools:node=“merge” attribute ensures that the manifest merger tool properly resolves any conflicting entries.合并工具解决冲突条目。

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <!-- This entry makes ExampleLoggerInitializer discoverable. -->
    <meta-data  android:name="com.example.ExampleLoggerInitializer"
          android:value="androidx.startup" />
</provider>

2.3 手动初始化组件

  1. 取消某个组件的初始化
<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data android:name="com.example.ExampleLoggerInitializer"
              tools:node="remove" />
</provider>

You use tools:node=“remove” in the entry instead of simply removing the entry in order to make sure that the merger tool also removes the entry from all other merged manifest files.

  1. 手动调用某个组件

如果某个组件的初始化无法有效,可以执行代码调用。

AppInitializer.getInstance(context)
    .initializeComponent(ExampleLoggerInitializer.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值