序文
App Startup は、アプリの起動を高速化するために使用できるライブラリです。
通常の開発では、ほとんどのサード パーティはアプリケーションで初期化する必要がありますが、一部のライブラリは ContentProvider の助けを借りて初期化されます。これにより、独自のライブラリの導入コストが低くなり、コードの煩わしさが減り、使いやすくなります。
ただし、プロジェクトが初期化に ContentProvider を使用するライブラリをどんどん導入すると、各 ContentProvider の初期化は時間のかかる操作であるため、アプリケーションの起動速度はますます遅くなります。
アプリの起動に関しては、初期化に使用するすべての ContentProvider を 1 つにまとめることができるため、アプリの起動速度が速くなります。実際、App Startup は内部で ContentProvider も作成し、初期化のための一連の標準を提供します。
サード パーティのライブラリを設計している場合は、ContentProvider の代わりに App Startup を使用してライブラリを初期化することをお勧めします。
基本的な使い方
App Startup の使い方を紹介しましょう。
ステップ 1: 依存関係を導入する
implementation "androidx.startup:startup-runtime:1.1.1"
ステップ 2: 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()
}
ステップ 3: AndroidManifest.xml で宣言する
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="com.example.demoproject.app.MainInitializer"
android:value="androidx.startup" />
</provider>
その中で、メタデータの android:name ノードは、カスタム Initializer のフルパス クラス名として指定する必要があり、他の部分は変更できません。そうしないと、App Startup ライブラリが正しく動作しない可能性があります。
手動初期化
メタデータを追加して、対応する初期化子tools:node="remove"
を。次に例を示します。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
このように、WorkManagerInitializer は onCreate メソッドを実行しないため、WorkManagerInitializer の初期化を実行したい場合は、手動で WorkManager の初期化メソッドを呼び出す必要があります。