StartUp介绍以及优化

2021-10-16  本文已影响0人  愈强

An Startup helper for Android module develop.

Startup介绍

androidx.startup 是为Library提供的用于自动初始化的插件。

接入方法

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

在Library中实现Initializer接口并添加初始化逻辑,并在Manifest中进行注册,即可完成自动初始化操作。
其中[Initializer full name]是Initializer实现类的全名,其他部分固定不变。

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge" >
    <meta-data
        android:name="[Initializer full name]"
        android:value="androidx.startup" />
</provider>

实现原理

startup插件利用了ContentProvider的特性:ContentProvider的onCreate方法先于Application的onCreate方法执行。
他们的执行顺序是这样的:

MyApplication.attachBaseContext -> ContentProvider.onCreate -> Application.onCreate

同时,在ContentProvider中可以通过getContext方法获取到Context。

Startup内部代码会解析Manifest中的注册信息,获取到已注册的初始化接口列表并进行初始化。

XStartup介绍

github地址:https://github.com/CyanFlxy/XStartup

XStartup基于 startup 进行了二次开发,针对国内官方要求以及应用启动模型进行优化修改。

支持的新特性

  1. 初始化时添加debug开关状态。
  2. 支持推迟执行敏感操作。
  3. 支持推迟执行非重要操作。
  4. 支持IdleHandler和子线程两种延时执行方案。

使用方法

Library中
在Manifest中进行注册Initializer接口实现:

<provider
    android:name="com.cyanflxy.xstartup.InitializationProvider"
    android:authorities="${applicationId}.xstartup"
    android:exported="false"
    tools:node="merge">
    <meta-data
        android:name="[InitializerImpl]"
        android:value="xstartup"/>
</provider

宿主App中
XStartup中的初始化逻辑(Initializer接口)被拆分为了三个方法,其作用分别如下:

  1. init1-仅对Context、debug开关等进行简单初始化操作。
  2. init2-可以执行敏感操作,必须执行重要操作。
  3. init3-可以执行耗时操作,可以执行不重要操作。

但是在XStartup SDK中,只有init1是自动执行的,另外两个需要宿主App触发执行。可以参考如下规则:

  1. 在用户同意《用户协议》之后执行XStartup.init2方法。
  2. 在主界面的onWindowFocusChanged方法中执行XStartup.init3方法。

备注

工信部要求,一些敏感操作必须在征得用户同意之后执行。敏感行为包括但不限于以下内容:

  1. 读取imei、imsi、oaid等设备信息
  2. 读取应用安装列表
  3. 进行联网操作
上一篇下一篇

猜你喜欢

热点阅读