【Android】App Startupの利用と分析

序文

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 の初期化メソッドを呼び出す必要があります。

Guess you like

Origin blog.csdn.net/yang553566463/article/details/125261217