Startup Aplikasi Bagian dari Android Jetpack.
Library App Startup menyediakan cara yang sederhana dan berperforma tinggi untuk menginisialisasi komponen saat aplikasi dimulai. Developer library dan developer aplikasi dapat menggunakan App Startup untuk menyederhanakan urutan startup dan secara eksplisit menetapkan urutan inisialisasi.
Daripada menentukan penyedia konten terpisah untuk setiap komponen yang perlu diinisialisasi, App Startup memungkinkan Anda menentukan penginisialisasi komponen yang menggunakan satu penyedia konten yang sama. Hal ini dapat meningkatkan waktu startup aplikasi secara signifikan.
Penyiapan
Untuk menggunakan Jetpack Startup di library atau aplikasi Anda, tambahkan kode berikut ke file Gradle Anda:
Groovy
dependencies { implementation "androidx.startup:startup-runtime:1.1.1" }
Kotlin
dependencies { implementation("androidx.startup:startup-runtime:1.1.1") }
Menginisialisasi komponen saat aplikasi dimulai
Aplikasi dan library sering kali mengandalkan komponen yang segera diinisialisasi saat aplikasi dimulai. Anda dapat memenuhi kebutuhan ini dengan menggunakan penyedia konten untuk menginisialisasi setiap dependensi, tetapi penyedia konten membutuhkan biaya yang mahal untuk dibuat instance-nya dan dapat memperlambat urutan startup jika tidak perlu. Selain itu, Android menginisialisasi penyedia konten dalam urutan yang tidak ditentukan. Startup Aplikasi menyediakan cara yang lebih berperforma tinggi untuk menginisialisasi komponen saat aplikasi dimulai dan secara eksplisit menentukan dependensinya.
Agar dapat menggunakan Startup Aplikasi untuk melakukan inisialisasi komponen secara otomatis saat startup, Anda harus menentukan penginisialisasi komponen untuk setiap komponen yang perlu diinisialisasi oleh aplikasi.
Mengimplementasikan penginisialisasi komponen
Anda menentukan setiap penginisialisasi komponen dengan membuat class yang mengimplementasikan
antarmuka Initializer<T>
.
Antarmuka ini menetapkan dua metode penting:
- Metode
create()
, yang berisi semua operasi yang diperlukan untuk menginisialisasi komponen dan menampilkan instanceT
. - Metode
dependencies()
, yang menampilkan daftar objekInitializer<T>
lain yang menjadi dependensi penginisialisasi. Anda dapat menggunakan metode ini untuk mengontrol urutan aplikasi menjalankan penginisialisasi saat startup.
Misalnya, aplikasi Anda bergantung pada
WorkManager
dan perlu
menginisialisasinya saat startup. Tentukan class WorkManagerInitializer
yang
mengimplementasikan Initializer<WorkManager>
:
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(); } }
Metode dependencies()
menampilkan daftar kosong karena WorkManager
tidak
bergantung pada library lain.
Misalkan aplikasi Anda juga bergantung pada library bernama ExampleLogger
, yang
selanjutnya bergantung pada WorkManager
. Dependensi ini berarti Anda perlu memastikan bahwa Startup Aplikasi melakukan inisialisasi WorkManager
terlebih dahulu. Tentukan
class ExampleLoggerInitializer
yang mengimplementasikan Initializer<ExampleLogger>
:
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); } }
Karena Anda menyertakan WorkManagerInitializer
dalam metode dependencies()
, App
Startup akan melakukan inisialisasi WorkManager
sebelum ExampleLogger
.
Menyiapkan entri manifes
Startup Aplikasi menyertakan penyedia konten khusus bernama InitializationProvider
yang digunakan untuk menemukan dan memanggil penginisialisasi komponen Anda. Startup Aplikasi
menemukan penginisialisasi komponen dengan memeriksa entri <meta-data>
terlebih dahulu
pada entri manifes InitializationProvider
. Kemudian, App Startup akan memanggil
metode dependencies()
untuk setiap penginisialisasi yang telah ditemukannya.
Ini berarti bahwa agar penginisialisasi komponen dapat ditemukan oleh App Startup, salah satu kondisi berikut harus dipenuhi:
- Penginisialisasi komponen memiliki entri
<meta-data>
yang sesuai pada entri manifesInitializationProvider
. - Penginisialisasi komponen tercantum dalam metode
dependencies()
dari penginisialisasi yang sudah dapat ditemukan.
Pertimbangkan lagi contoh dengan WorkManagerInitializer
dan
ExampleLoggerInitializer
. Untuk memastikan Startup Aplikasi dapat menemukan penginisialisasi ini, tambahkan kode berikut ke file manifes:
<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>
Anda tidak perlu menambahkan entri <meta-data>
untuk WorkManagerInitializer
,
karena WorkManagerInitializer
adalah dependensi dari ExampleLoggerInitializer
.
Ini berarti bahwa jika ExampleLoggerInitializer
dapat ditemukan, maka
WorkManagerInitializer
juga dapat ditemukan.
Atribut tools:node="merge"
memastikan bahwa alat penggabung manifes menyelesaikan setiap entri yang berkonflik dengan benar.
Menjalankan pemeriksaan lint
Library App Startup menyertakan sekumpulan aturan lint yang dapat digunakan untuk memeriksa
apakah Anda telah menentukan penginisialisasi komponen dengan benar. Anda dapat menjalankan
pemeriksaan lint ini dengan menjalankan ./gradlew :app:lintDebug
dari command line.
Melakukan inisialisasi komponen secara manual
Biasanya, saat Anda menggunakan Startup Aplikasi, objek InitializationProvider
akan menggunakan
entity yang disebut
AppInitializer
untuk
menemukan dan menjalankan penginisialisasi komponen secara otomatis saat aplikasi dimulai.
Namun, Anda juga dapat menggunakan AppInitializer
secara langsung untuk menginisialisasi
komponen yang tidak diperlukan aplikasi saat startup secara manual. Ini disebut inisialisasi lambat, dan dapat membantu meminimalkan biaya startup.
Anda harus menonaktifkan inisialisasi otomatis terlebih dahulu untuk setiap komponen yang ingin diinisialisasi secara manual.
Menonaktifkan inisialisasi otomatis untuk setiap komponen
Guna menonaktifkan inisialisasi otomatis untuk satu komponen, hapus
entri <meta-data>
untuk penginisialisasi komponen tersebut dari manifes.
Misalnya, menambahkan kode berikut ke file manifes akan menonaktifkan inisialisasi otomatis untuk ExampleLogger
:
<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>
Gunakan tools:node="remove"
dalam entri, bukan hanya menghapus entri tersebut untuk memastikan bahwa alat penggabung juga menghapus entri dari semua file manifes gabungan lainnya.
Menonaktifkan inisialisasi otomatis untuk semua komponen
Untuk menonaktifkan semua inisialisasi otomatis, hapus seluruh entri untuk InitializationProvider
dari manifes:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
Memanggil penginisialisasi komponen secara manual
Jika inisialisasi otomatis dinonaktifkan untuk suatu komponen, Anda dapat menggunakan
AppInitializer
untuk melakukan inisialisasi komponen tersebut dan dependensinya secara manual.
Misalnya, kode berikut memanggil AppInitializer
dan melakukan inisialisasi ExampleLogger
secara manual:
Kotlin
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java)
Java
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer.class);
Akibatnya, Startup Aplikasi juga melakukan inisialisasi WorkManager
karena WorkManager
adalah
dependensi dari ExampleLogger
.
Berikan masukan
Sampaikan masukan dan ide Anda kepada kami melalui resource berikut:
- Issue tracker
- Laporkan masalah agar kami dapat memperbaiki bug.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Arsitektur Aplikasi: Lapisan Data - Menjadwalkan Tugas dengan WorkManager - Android Developers
- Arsitektur Aplikasi: Lapisan Data - DataStore - Android Developers