Peluncuran Aplikasi Bagian dari Android Jetpack.
Library App Startup menyediakan cara yang mudah dan berperforma tinggi untuk menginisialisasi komponen saat memulai aplikasi. Developer library dan developer aplikasi dapat menggunakan Startup Aplikasi untuk menyederhanakan urutan pengaktifan dan menetapkan urutan secara eksplisit dari inisialisasi.
Daripada menetapkan penyedia konten terpisah untuk setiap komponen, Anda harus Anda, App Startup memungkinkan Anda menentukan penginisialisasi komponen yang berbagi penyedia konten tunggal. Hal ini dapat meningkatkan waktu startup aplikasi secara signifikan.
Penyiapan
Untuk menggunakan Jetpack Startup di library atau aplikasi Anda, tambahkan kode berikut ke Gradle file:
Groovy
dependencies { implementation "androidx.startup:startup-runtime:1.2.0" }
Kotlin
dependencies { implementation("androidx.startup:startup-runtime:1.2.0") }
Melakukan inisialisasi komponen saat aplikasi dimulai
Aplikasi dan library sering kali mengandalkan komponen yang segera diinisialisasi saat aplikasi dijalankan. Anda dapat memenuhi kebutuhan ini dengan menggunakan penyedia konten untuk menginisialisasi setiap dependensi, tetapi penyedia konten mahal untuk membuat instance dan dapat memperlambat urutan pengaktifan secara 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 menginisialisasi komponen secara otomatis saat startup, Anda harus menentukan penginisialisasi komponen untuk setiap komponen yang perlu dilakukan aplikasi melakukan inisialisasi.
Mengimplementasikan penginisialisasi komponen
Anda menentukan setiap penginisialisasi komponen dengan membuat class yang mengimplementasikan
Antarmuka Initializer<T>
.
Antarmuka ini mendefinisikan dua metode penting:
- Metode
create()
, yang berisi semua operasi yang diperlukan untuk melakukan inisialisasi komponen dan menampilkan instanceT
. - Metode
dependencies()
, yang menampilkan daftar ObjekInitializer<T>
yang menjadi dependensi penginisialisasi. Anda dapat menggunakan untuk mengontrol urutan aplikasi menjalankan penginisialisasi saat startup.
Misalnya, anggaplah aplikasi Anda bergantung pada
WorkManager
dan perlu
melakukan inisialisasi pada 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 lainnya.
Misalkan aplikasi Anda juga bergantung pada library yang disebut ExampleLogger
, yang di
belokan bergantung pada WorkManager
. Ketergantungan ini berarti
Anda perlu memastikan
Startup Aplikasi tersebut 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()
, Aplikasi
Startup melakukan inisialisasi WorkManager
sebelum ExampleLogger
.
Menyiapkan entri manifes
Startup Aplikasi menyertakan penyedia konten khusus yang disebut InitializationProvider
yang digunakannya untuk menemukan dan
memanggil penginisialisasi komponen. Peluncuran Aplikasi
menemukan penginisialisasi komponen dengan memeriksa entri <meta-data>
terlebih dahulu
di bawah entri manifes InitializationProvider
. Kemudian, App Startup memanggil
Metode dependencies()
untuk setiap penginisialisasi yang telah ditemukan.
Ini berarti, agar penginisialisasi komponen dapat ditemukan oleh Aplikasi Saat startup, salah satu kondisi berikut harus dipenuhi:
- Penginisialisasi komponen memiliki entri
<meta-data>
yang sesuai di bagianInitializationProvider
entri manifes. - 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, tambahkan baris 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
merupakan dependensi dari ExampleLoggerInitializer
.
Ini berarti jika ExampleLoggerInitializer
dapat ditemukan, begitu juga
WorkManagerInitializer
.
Atribut tools:node="merge"
memastikan bahwa penggabungan manifes
secara tepat menyelesaikan setiap entri yang berkonflik.
Menjalankan pemeriksaan lint
Library App Startup menyertakan sekumpulan aturan lint yang bisa Anda gunakan untuk memeriksa
apakah Anda telah menentukan penginisialisasi
komponen dengan benar. Anda dapat melakukan
pemeriksaan lint ini dengan menjalankan ./gradlew :app:lintDebug
dari command line.
Melakukan inisialisasi komponen secara manual
Biasanya, saat Anda menggunakan Startup Aplikasi, objek InitializationProvider
menggunakan
entitas yang disebut
AppInitializer
ke
menemukan dan menjalankan penginisialisasi komponen secara otomatis saat memulai aplikasi.
Namun, Anda juga dapat menggunakan AppInitializer
secara langsung untuk
menginisialisasi komponen yang tidak
diperlukan aplikasi Anda saat startup. Hal ini disebut
inisialisasi lambat, dan dapat membantu meminimalkan biaya startup.
Anda harus menonaktifkan inisialisasi otomatis terlebih dahulu untuk setiap komponen yang diinginkan untuk melakukan inisialisasi secara manual.
Menonaktifkan inisialisasi otomatis untuk masing-masing komponen
Untuk menonaktifkan inisialisasi otomatis untuk satu komponen, hapus metode
Entri <meta-data>
untuk penginisialisasi komponen dari manifes.
Misalnya, menambahkan string berikut ke file manifes akan menonaktifkan setelan otomatis
inisialisasi 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>
Anda menggunakan tools:node="remove"
dalam entri, bukan hanya menghapus entri tersebut
untuk memastikan bahwa alat bantu penggabung juga
menghapus entri dari semua
gabungan file manifes.
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 sebuah komponen, Anda dapat menggunakan
AppInitializer
untuk melakukan inisialisasi secara manual pada komponen tersebut dan dependensinya.
Misalnya, kode berikut memanggil AppInitializer
dan melakukan inisialisasi secara manual
ExampleLogger
:
Kotlin
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java)
Java
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer.class);
Akibatnya, Startup Aplikasi juga melakukan inisialisasi WorkManager
karena WorkManager
dependensi 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