• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用-Jetpack-App-Startup-库减少应用启动时间

android 搞代码 3年前 (2022-03-01) 7次浏览 已收录 0个评论

作者 / Yacine Rezgui

利用启动工夫是利用性能的要害掂量指标。利用启动后,用户冀望可能失去疾速响应并加载内容,当不合乎预期时用户会感到悲观。这种蹩脚的体验可能会导致用户在 Play 商店上对您的利用给予低分数的评估,甚至不会再次应用。

Jetpack App Startup 库在利用启动时以一种简略、高效的办法来初始化组件。库开发者和利用开发者都能够应用 App Startup 简化启动流程,并显式指定初始化程序。

利用和库往往须要在 Application.onCreate() 之前初始化组件,如: WorkManagerProcessLifecycleObserverFirebaseApp 等。这往往通过应用 ContentProvider 来实现不同依赖的初始化。通过 App Startup,您无需为每个组件独自定义 ContentProvider 进行初始化,而能够定义多个 Initializer 去共享雷同的 ContentProvider。每缩小一个 ContentProvider 通常会有约 2ms 的收益,这能够显著进步利用启动速度。App Startup 还能够简化 提早初始化组件 操作,从而帮忙您进一步提高启动性能。当 App Startup 进入稳固版本后,咱们将更新诸如 WorkManager 和 ProcessLifecycle 之类的库,以从中受害。

App Startup 反对 API 14 及以上。

如何应用

配置 Gradle

为了在您的依赖库或利用中应用 App Startup,您须要在 Gradle 文件中增加如下依赖项:

repositories {
    google()
    maven()
}
dependencies {
  implementation "androidx.startup:startup-runtime:1.0.0"
}

定义 Initializer

为了在利用中应用 App Startup,您须要定义一个 Initializer。您能够在此定义如何初始化以及指定依赖其余的 Initializer。这是您须要实现的接口:

interface Initializer<out T: Any> {
    fun create(context: Context): T
    fun dependencies(): List<Class<out Initializer<*>>>
}

在理论案例中,初始化 WorkManager 的 Initializer 可能如下:

<code class="Kotlin">class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder()
            .setMinimumLoggingLevel(Log.DEBUG)
            .build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    // 此组件无需任何依赖
    override fun dependencies() = emptyList<Class<out Initializer<*>>>()
}

提醒 : 此示例为纯正阐明性质,该 Initializer 实际上应该由 WorkManager 依赖库定义。

最初,咱们须要在 AndroidManifest.xml 中减少 WorkManagerInitializer 条目:

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

工作原理

App Startup 应用了一个名为 InitializationProvider 的 ContentProvider。该 ContentProvider 在合并后的 AndroidManifest.xml 文件中查找 <meta-data> 条目来发现 Initializer。此过程产生在 Application.onCreate() 被调用之前。

实现上一阶段之后,加载组件之前会先加载该组件的所有依赖项。因而,能够确保组件的所有依赖项都已实现初始化后才对其进行初始化。

提早初始化

咱们强烈推荐您应用提早初始化来进一步晋升启动性能,您能够通过如下形式实现组件的提早初始化,在 <meta-data> 条目下为 Initializer 减少 tools:node="remove" 属性,这将禁用即时初始化:

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

    <!-- 禁用即时初始化 -->
    <meta-data android:name="com.example.WorkManagerInitializer"
              tools:node="remove" />
</provider>

为了实现 WorkManagerInitializer 的提早初始化,您能够进行如下操作:

// 此处返回一个 WorkManager 的实例
AppInitializer.getInstance(context)
    .initializeComponent(WorkManagerInitializer.class);

至此,您的利用曾经提早初始化该组件了。您能够浏览咱们的 具体文档。

最初

App Startup 目前处于 1.0.0 版本。您能够从咱们的 文档 中找到无关如何应用它的更多信息。如果您在应用中呈现任何问题,请及时向咱们 反馈问题,以帮忙咱们更好地改良。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用-Jetpack-App-Startup-库减少应用启动时间

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址