Panduan Lengkap untuk Suntikan Kebergantungan dengan Hilt pada Android

  • Hilt memudahkan Dagger dengan menyediakan bekas automatik yang sejajar dengan kitaran hayat Android.
  • Ia membolehkan penyahgandingan kod melalui suntikan pembina, modul dengan @Provides dan @Binds.
  • Urus skop tika menggunakan komponen tertentu seperti SingletonComponent atau ActivityComponent.
  • Ia memudahkan pembangunan seni bina yang boleh diskala dan diuji, terutamanya dalam persekitaran dengan Jetpack Compose dan MVVM.

Hilt Android

Jika anda membangunkan aplikasi Android, anda mungkin pernah mengalami keperluan untuk mengatur kelas anda dengan lebih baik bagi mengelakkan projek daripada menjadi huru-hara sepenuhnya. Di sinilah suntikan kebergantungan memainkan peranan , corak reka bentuk yang, walaupun pada mulanya mungkin kelihatan seperti ilmu hitam, pada asasnya adalah cara untuk menyediakan setiap kelas dengan objek yang diperlukannya tanpa kelas perlu menciptanya sendiri.

Hilt tiba untuk menyelamatkan kita daripada kerumitan Dagger, menawarkan lapisan atas yang menyeragamkan penyisipan kebergantungan . Dengan berintegrasi dengan Jetpack, Hilt mengurus kontena dan kitaran hayat secara automatik, membolehkan kita menumpukan pada logik perniagaan dan bukannya menggerakkan objek seperti kita sedang berpindah rumah.

Konfigurasi Persekitaran Awal

Untuk bermula dengan Hilt, langkah pertama adalah menyediakan persekitaran Gradle. Adalah penting untuk menambah hilt-android-gradle-plugin pada fail konfigurasi peringkat projek anda. Kemudian, dalam fail modul aplikasi anda, anda perlu menggunakan plugin dan menambah kebergantungan yang sepadan, memastikan bahawa pengkompil (sama ada menggunakan kapt atau KSP) dikonfigurasikan dengan betul.

Satu perincian penting ialah, agar semuanya berjalan lancar, projek mesti dikonfigurasikan untuk menggunakan Java 17 (atau Java 8 untuk versi lama), kerana ini merupakan prasyarat untuk Hilt dan Jetpack Compose berfungsi bersama dengan lancar. Jika anda perasan bahawa program tidak dikompil apabila anda mengaktifkan pemalam, semak semula sama ada versi Kotlin dan KSP sepadan dengan tepat, kerana sedikit percanggahan pun boleh mengganggu keseluruhan proses kompilasi.

Jantung Hilt: Kelas Aplikasi

Mana-mana aplikasi yang ingin mendapat manfaat daripada pustaka ini mesti mempunyai kelas Aplikasi tersuai. Hanya menciptanya tidak mencukupi; ia mesti ditanda dengan anotasi @HiltAndroidApp . Baris ini mencetuskan penjanaan kod Hilt dan mencipta bekas root aplikasi.

Konteks pada Android
artikel berkaitan:
Panduan Lengkap untuk Konteks dalam Android: Apakah itu dan Cara Menguruskannya

Komponen peringkat atasan ini penting kerana ia menghubungkan kepada keseluruhan kitaran hayat aplikasi dan berfungsi sebagai asas untuk semua komponen lain mengakses kebergantungan yang ditakrifkan pada peringkat ini. Sudah tentu, jangan lupa untuk mendaftarkan kelas ini dalam fail AndroidManifest.xml menggunakan atribut name, atau Hilt akan terlepas pandang sepenuhnya.

Menyuntik Kebergantungan ke dalam Komponen Android

Setelah aplikasi siap, kita boleh mula menyuntik kebergantungan ke dalam aktiviti, fragmen, pandangan atau perkhidmatan. Untuk melakukan ini, kita menggunakan anotasi @AndroidEntryPoint . Ini memberitahu Hilt bahawa kelas ini ialah titik masuk dan ia harus menjana komponen khusus untuknya.

Apabila kita ingin mendapatkan kebergantungan tertentu dalam sesuatu aktiviti, kita menggunakan suntikan medan melalui anotasi @Inject. Adalah sangat penting untuk diingat bahawa medan ini tidak boleh bersifat peribadi ; jika anda cuba menggunakan pengubah suai peribadi, pengkompil akan memberikan ralat tanpa teragak-agak. Dalam kes Jetpack Compose, hanya dengan memberi anotasi pada Aktiviti akar membolehkan kita mengakses ViewModels terus dalam fungsi yang boleh dikompos.

Strategi untuk Menentukan Hubungan

Hilt perlu tahu cara mencipta objek yang kita minta. Cara paling langsung ialah suntikan pembina , di mana kita meletakkan `@Inject` betul-betul di hadapan pembina kelas. Ini membolehkan Hilt menganalisis parameter dan menentukan cara menyediakan setiap kebergantungan tersebut.

Walau bagaimanapun, terdapat kes di mana kita tidak mempunyai kawalan penuh ke atas kelas, seperti apabila menggunakan pustaka luaran seperti Retrofit atau OkHttpClient. Di sinilah Modul Hilt memainkan peranan . Modul ialah kelas yang dianotasi dengan @Module dan mesti termasuk @InstallIn untuk menentukan komponen mana yang harus menempatkan kebergantungan tersebut.

  • Penggunaan @Provides: Ini digunakan apabila kelas tersebut adalah pihak ketiga atau memerlukan corak pembinaan yang kompleks. Di sini kita mentakrifkan fungsi yang mengembalikan tika yang diperlukan.
  • Menggunakan @Binds: Ini adalah pilihan ideal apabila kita ingin menghubungkan antara muka dengan pelaksanaan konkrit. Ia ditakrifkan sebagai fungsi abstrak yang memberitahu Hilt: "apabila seseorang meminta antara muka ini, berikan mereka pelaksanaan ini."

Skop dan Pengurusan Kitaran Hayat

Secara lalai, Hilt mencipta tika baharu setiap kali kebergantungan diminta. Walau bagaimanapun, kadangkala kita memerlukan objek kekal sama sepanjang hayat aplikasi atau skrin. Untuk ini, kita menggunakan skop komponen.

Jika kita menanda kelas dengan @Singleton dan memasangnya dalam SingletonComponent, kita akan mempunyai satu contoh global. Jika kita lebih suka objek hanya wujud untuk tempoh aktiviti, kita menggunakan @ActivityScoped dalam ActivityComponent. Adalah penting untuk tidak menggunakan skop secara berlebihan, kerana menyimpan objek dalam memori terlalu lama boleh memberi kesan negatif kepada prestasi aplikasi.

Kes Khas dan Kelayakan

Kadangkala kita perlu menyuntik dua pelaksanaan berbeza bagi antara muka yang sama. Untuk mengelakkan penyusun membebankan, kita menggunakan qualifier . Qualifier pada asasnya ialah anotasi tersuai yang digunakan untuk melabel pengikatan tertentu, yang membolehkan kita membezakan, contohnya, antara klien HTTP untuk pengesahan dan satu untuk permintaan umum.

mvvm
artikel berkaitan:
MVVM: Corak Seni Bina Perisian Terbaik untuk Apl Moden

Tambahan pula, Hilt memudahkan perkara dengan kelayakan yang telah ditetapkan seperti @ApplicationContext dan @ActivityContext, yang membolehkan kita mendapatkan konteks Android tanpa perlu mengkonfigurasi modul secara manual. Akhir sekali, untuk kelas yang tidak disokong secara natif oleh Hilt (seperti ContentProviders), kita boleh menggunakan anotasi @EntryPoint , mencipta jambatan manual untuk mengekstrak kebergantungan daripada graf Hilt. Kongsikan maklumat ini supaya lebih ramai pengguna boleh mengetahui mengenainya.


Tambahkan sebagai sumber pilihan dalam Google