Uygulama Başlatma Android Jetpack'in bir parçasıdır.

Uygulama Başlatma kitaplığı, ilk kullanıma hazırlamanız için basit ve etkili bir yöntem sunar. bileşenlerine ayıralım. Hem kitaplık geliştiricileri hem de uygulama geliştiriciler başlatma sıralarını kolaylaştırmak ve sıralamayı açıkça ayarlamak için Uygulama Başlatma'yı kullanabilir ilk kullanıma hazırlama sürecidir.

Her bileşen için ayrı içerik sağlayıcılar tanımlamak yerine Uygulama Başlatma, bir ortak çalışan bileşen başlatıcıları tanımlamanıza tek bir içerik sağlayıcı. Bu, uygulama başlatma süresini önemli ölçüde kısaltabilir.

Kurulum

Kitaplığınızda veya uygulamanızda Jetpack Startup'ı kullanmak için aşağıdakini Gradle'ınıza ekleyin dosya:

Eski

dependencies {
    implementation "androidx.startup:startup-runtime:1.1.1"
}

Kotlin

dependencies {
    implementation("androidx.startup:startup-runtime:1.1.1")
}

Uygulama başlatılırken bileşenleri başlatma

Uygulamalar ve kitaplıklar, genellikle gerekli olduğunda bileşenlerin hemen başlatılmasını uygulama başlar. İçerik sağlayıcıları kullanarak bu ihtiyacı karşılayabilirsiniz. her bağımlılığı başlatın, ancak içerik sağlayıcıların örneklendirmesi pahalıdır. ve başlatma sırasını gereksiz biçimde yavaşlatabilir. Ayrıca, Android ilk kullanıma hazırlar. Uygulama Başlatma; uygulama başlatma sırasında bileşenleri ilk kullanıma hazırlamanın daha etkili bir yolunu ve bağımlılıklarını tanımlamalısınız.

Uygulama Başlatma özelliğini kullanarak başlatma sırasında bileşenleri otomatik olarak ilk kullanıma hazırlamak için: uygulamanın yapması gereken her bileşen için bir bileşen başlatıcısı tanımlama ilk kullanıma hazırla.

Bileşen başlatıcıları uygulama

Her bileşen başlatıcıyı uygulayan bir sınıf oluşturarak Initializer<T> arayüzü. Bu arayüzde iki önemli yöntem tanımlanmaktadır:

  • Gerekli tüm işlemleri içeren create() yöntemi, ilk kullanıma hazırlar ve bir T örneği döndürür.
  • Diğerdependencies() Başlatıcının bağlı olduğu Initializer<T> nesne. Bunu kullanabilirsiniz yöntemini kullanın.

Örneğin, uygulamanızın WorkManager ve şunu yapması gerekiyor: ilk kullanıma hazırlar. Şu özelliklere sahip bir WorkManagerInitializer sınıfı tanımlayın: Initializer<WorkManager> uygular:

Kotlin

// Initializes WorkManager.
class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder().build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    override fun dependencies(): List<Class<out Initializer<*>>> {
        // No dependencies on other libraries.
        return emptyList()
    }
}

Java

// Initializes WorkManager.
class WorkManagerInitializer implements Initializer<WorkManager> {

    @Override
    public WorkManager create(Context context) {
        Configuration configuration = Configuration.Builder().build();
        WorkManager.initialize(context, configuration);
        return WorkManager.getInstance(context);
    }

    @Override
    public List<Class<Initializer<?>>> dependencies() {
        // No dependencies on other libraries.
        return emptyList();
    }

}

WorkManager, dependencies() yöntemi boş bir liste döndürüyor diğer kitaplıklar da olabilir.

Uygulamanızın aynı zamanda ExampleLogger adlı bir kitaplığa da bağlı olduğunu varsayalım. dönüşüm sayısı WorkManager metriğine bağlıdır. Bu bağımlılık demek oluyor ki Uygulama Başlatma'nın önce WorkManager uygulamasını başlattığını unutmayın. Bir Initializer<ExampleLogger> uygulayan ExampleLoggerInitializer sınıfı:

Kotlin

// Initializes ExampleLogger.
class ExampleLoggerInitializer : Initializer<ExampleLogger> {
    override fun create(context: Context): ExampleLogger {
        // WorkManager.getInstance() is non-null only after
        // WorkManager is initialized.
        return ExampleLogger(WorkManager.getInstance(context))
    }

    override fun dependencies(): List<Class<out Initializer<*>>> {
        // Defines a dependency on WorkManagerInitializer so it can be
        // initialized after WorkManager is initialized.
        return listOf(WorkManagerInitializer::class.java)
    }
}

Java

// Initializes ExampleLogger.
class ExampleLoggerInitializer implements Initializer<ExampleLogger> {

    @Override
    public ExampleLogger create(Context context) {
        // WorkManager.getInstance() is non-null only after
        // WorkManager is initialized.
        return ExampleLogger(WorkManager.getInstance(context));
    }

    @Override
    public List<Class<Initializer<?>>> dependencies() {
        // Defines a dependency on WorkManagerInitializer so it can be
        // initialized after WorkManager is initialized.
        return Arrays.asList(WorkManagerInitializer.class);
    }
}

dependencies() yöntemine WorkManagerInitializer eklediğiniz için Başlatma, ExampleLogger tarihinden önce WorkManager işlemini başlatır.

Manifest girişlerini ayarlama

Uygulama Başlatma, InitializationProvider adlı özel bir içerik sağlayıcı içeriyor bulmak ve çağırmak için kullanır. Uygulama Başlatma önce bir <meta-data> girişi olup olmadığını kontrol ederek bileşen başlatıcılarını keşfeder InitializationProvider manifest girişinin altında. Ardından Uygulama Başlatma Daha önce keşfettiği tüm başlatıcılar için dependencies() yöntem.

Bu, bir bileşen başlatıcının Uygulama tarafından bulunabilir olması için Başlatma durumunda aşağıdaki koşullardan biri yerine getirilmelidir:

  • Bileşen başlatıcının altında karşılık gelen bir <meta-data> girişi vardır: InitializationProvider manifest girişi.
  • Bileşen başlatıcı, dependencies() yönteminde listelenen bir başlatıcıyı kullanabilirsiniz.

WorkManagerInitializer ve Arkadaş Bitkiler projesinin ExampleLoggerInitializer. Uygulama Startup'ın bunları keşfedebilmesi için manifest dosyasına aşağıdakini ekleyin:

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

WorkManagerInitializer için bir <meta-data> girişi eklemeniz gerekmez. çünkü WorkManagerInitializer, ExampleLoggerInitializer öğesinin bir bağımlılığıdır. Yani, ExampleLoggerInitializer bulunabilir durumdaysa WorkManagerInitializer.

tools:node="merge" özelliği, manifest birleştirme işleminin aracı çakışan girişleri düzgün bir şekilde çözer.

lint kontrollerini çalıştır

Uygulama Başlatma kitaplığı, kontrol etmek için kullanabileceğiniz bir dizi lint kuralı içerir. Bileşen başlatıcılarınızı doğru tanımlayıp tanımlamadığınızı kontrol edin. Şu işlemleri gerçekleştirebilirsiniz: bu lint kontrollerini komut satırından ./gradlew :app:lintDebug çalıştırarak yapabilirsiniz.

Bileşenleri manuel olarak başlat

Normalde Uygulama Başlatma özelliğini kullandığınızda InitializationProvider nesnesi, adlı varlık AppInitializer yerine uygulama başlatılırken bileşen başlatıcılarını otomatik olarak keşfedip çalıştırın. Ancak, manuel olarak yapmak için doğrudan AppInitializer ihtiyaç duymadığınız bileşenleri başlatın. Buna geç başlatma olanağı sunar ve başlatma maliyetlerini en aza indirmeye yardımcı olur.

Öncelikle otomatik başlatmayı istediğiniz bileşenler için devre dışı bırakmanız gerekir manuel olarak başlatın.

Tek bir bileşen için otomatik başlatmayı devre dışı bırak

Otomatik başlatmayı tek bir bileşen için devre dışı bırakmak üzere Manifest'ten söz konusu bileşenin başlatıcısı için <meta-data> girişi.

Örneğin, aşağıdakilerin manifest dosyasına eklenmesi, otomatik ExampleLogger için başlatma:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data android:name="com.example.ExampleLoggerInitializer"
              tools:node="remove" />
</provider>

Girişi kaldırmak yerine girişte tools:node="remove" yöntemini kullanmışsınız birleştirme aracının, bu girişi diğer tüm birleştirebilirsiniz.

Tüm bileşenler için otomatik başlatmayı devre dışı bırak

Tüm otomatik başlatmayı devre dışı bırakmak için şunun için girişin tamamını kaldırın: Manifest dosyasındaki InitializationProvider:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove" />

Bileşen başlatıcıları manuel olarak ara

Bir bileşen için otomatik başlatma devre dışı bırakılmışsa, bileşeni ve bağımlılıklarını manuel olarak başlatmak için AppInitializer tuşlarına basın.

Örneğin, aşağıdaki kod AppInitializer yöntemini çağırır ve manuel olarak başlatır ExampleLogger:

Kotlin

AppInitializer.getInstance(context)
    .initializeComponent(ExampleLoggerInitializer::class.java)

Java

AppInitializer.getInstance(context)
    .initializeComponent(ExampleLoggerInitializer.class);

Sonuç olarak Uygulama Başlatma, WorkManager şu nedenle de ilk kullanıma hazırlar: WorkManager bir ExampleLogger bağımlılığı.

Geri bildirim gönder

Aşağıdaki kaynakları kullanarak geri bildiriminizi ve düşüncelerinizi bizimle paylaşın:

Sorun izleyici
Hataları düzeltebilmemiz için sorunları bildirin.
ziyaret edin.
'nı inceleyin. ziyaret edin.