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:
Groovy
dependencies { implementation "androidx.startup:startup-runtime:1.2.0" }
Kotlin
dependencies { implementation("androidx.startup:startup-runtime:1.2.0") }
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 birT
örneği döndürür. - Diğer
dependencies()
Başlatıcının bağlı olduğuInitializer<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.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Uygulama Mimarisi: Veri Katmanı - WorkManager ile Görev Planlama - Android Geliştiricileri
- Uygulama Mimarisi: Veri Katmanı - DataStore - Android Geliştiricileri