前言

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 中声明

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

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

手动初始化

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

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

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

【Android】之 App Startup 的使用及浅析相关推荐

  1. 深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析

    本文首发我的微信公众号:徐公,想成为一名优秀的 Android 开发者,需要一份完备的 知识体系,在这里,让我们一起成长,变得更好~. 前言 前一阵子,写了几篇 Android 启动优化的文章,主要是 ...

  2. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  3. 学习Android启动初始化 App StartUp

    StartUp是为了App的启动提供的一套简单.高效的初始化方案. ContentProvider中初始化 在项目中会需要用到很多的第三方库,而很多第三方库都提供了显示的调用初始化接口,需要在Appl ...

  4. Android应用内社区SDK技术架构浅析

    Android应用内社区SDK技术架构浅析 图1为雪球财经自选界面,图2是雪球财经App内的社区,也就是动态页面. 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社 ...

  5. Android 5.1 Lollipop Phone工作流程浅析(十三)__InCallActivity启动Performance浅析

    前置文章: < Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结 ...

  6. Android平台App进程优先级

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52351047 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  7. Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程分析

    本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. ...

  8. [免费专栏] Android安全之静态逆向APK应用浅析「手动注入smali」+「IDA Pro静态分析so文件」+「IDA Pro基础使用讲解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  9. App Startup原理解析

    前言 在上篇文章中「初始化Library新姿势--App Startup」我们学会了 App Startup 的使用,下面我们接着学习 App Startup 的原理. 切入点 在学习原理之前,我们需 ...

  10. android 程序 读logo,Android端APP更换logo和名称后都需要些测试哪些内容呢?

    原标题:Android端APP更换logo和名称后都需要些测试哪些内容呢? 之前有人在搜狗测试粉丝群中问过APP更换logo和名称后需要怎么测试呢?小编正好经历过这样的需求,下面来系统整理一下APP更 ...

最新文章

  1. 在VS2015中使用Boost库
  2. 推荐 7 个 Vue2、Vue3 源码解密分析的开源项目
  3. javascript 总结笔记
  4. python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析
  5. C++与QML交互(信号与槽通知QML,C++注册QML,QML结点映射C++类)
  6. Robust.ai 获得 1500 万美元融资,嘴炮 Gary Marcus 也难逃真香定律
  7. 戴尔笔记本不能识别U盘和鼠标解决方法
  8. C++中,类如果包含map/list等对象,慎用memset(0)
  9. Elasticsearch2.2.0数据操作
  10. 火山PC_火山安卓_免安装解压即用版本
  11. hpy计算机维护系统,HPY计算机维护PE系统启动U盘\UD版\网启版制作图文教程
  12. c语言头文件及形式,C语言头文件作用及写法
  13. ASM文件系统 数据如何写和读数据
  14. kindle索引_kindle突然全部书卡索引
  15. 微信小程序怎么实现收藏功能
  16. 神临的 Unity shader 学习之多Pass渲染 (九)
  17. cad安装计算机丢失无法启动不了,Win10无法打开CAD2006提示“计算机中丢失ac1st16.dll”怎么办...
  18. 数据库原理 第四章作业
  19. 【亲测 | 007】易搜资料 V2.4.3版本 非独立版 亲测无错 | 极致技术工厂
  20. CSS中的常见单位(px,%,em,rem,vw,vh,vmax,vmin,calc)

热门文章

  1. Spark独到见解--Action算子总结
  2. 计算机上没有保存任何数据源,Excel数据表找不到链接莫着急——三点操作重建数据的源文件-查看源文件...
  3. WIn7 解决 - ReadyBoost 未启用,因为该计算机的运行速度足够快
  4. 四天学会JavaScript(Day1~Day4)
  5. Java生成随机数公式
  6. STM32---FLASH闪存
  7. ipad上写代码???阿里云+vscode-server助你一臂之力
  8. 安全高效的中小型网络
  9. 网课python程序设计答案_中国大学MOOCPython程序设计网课答案
  10. Myeclipse/Eclipse中修改WebContent/WebRoot