Uma uthuthukisa izinhlelo zokusebenza ze-Android, kungenzeka ukuthi uke wahlangabezana nesidingo sokuhlela kangcono amakilasi akho ukuze uvimbele iphrojekthi ukuthi ingabi yisiphithiphithi esiphelele. Yilapho kungena khona i-dependency injection , iphethini yokuklama, yize ekuqaleni ingase ibonakale njengomlingo omnyama, empeleni iyindlela yokunikeza ikilasi ngalinye izinto elizidingayo ngaphandle kokuthi ikilasi lizidale lona ngokwalo.
UHilt ufika ezosisindisa ebunzimeni beDagger, enikeza ungqimba oluphezulu olulinganisa ukufakwa kokuxhomekeka . Ngokuhlanganisa neJetpack, uHilt uphatha ngokuzenzakalelayo izitsha kanye nemijikelezo yokuphila, okusivumela ukuthi sigxile ku-logic yebhizinisi esikhundleni sokuhambisa izinto sengathi sithutha indlu.
Ukucushwa Kwemvelo Kwasekuqaleni
Ukuze uqale nge-Hilt, isinyathelo sokuqala ukulungiselela indawo ye-Gradle. Kubalulekile ukwengeza i- hilt-android-gradle-plugin kufayela lakho lokucushwa kweleveli yephrojekthi. Bese, kufayela lemojuli yohlelo lwakho lokusebenza, udinga ukusebenzisa i-plugin bese wengeza ukuncika okuhambisanayo, uqinisekise ukuthi i-compiler (kungakhathaliseki ukuthi isebenzisa i-kapt noma i-KSP) ilungiselelwe kahle.
Into ebalulekile ukuthi, ukuze konke kusebenze kahle, iphrojekthi kumele ihlelwe ukuze isebenzise i-Java 17 (noma i-Java 8 yezinguqulo ezindala), njengoba lokhu kuyimfuneko yokuthi i-Hilt ne -Jetpack Compose zisebenze ndawonye ngaphandle kokuphazamiseka. Uma uqaphela ukuthi uhlelo aluhlanganisi lapho usebenzisa i-plugin, hlola kabili ukuthi izinguqulo ze-Kotlin ne-KSP ziyafana ncamashi, ngoba ngisho nokungafani okuncane kungaphula yonke inqubo yokuhlanganisa.
Inhliziyo kaHilt: Ikilasi Lokufaka Isicelo
Noma yiluphi uhlelo lokusebenza olufuna ukuzuza kulo mtapo wolwazi kumele lube neklasi le-Application elenziwe ngokwezifiso. Ukulidala nje akwanele; kumele limakwe ngesichasiselo se- @HiltAndroidApp . Lo mugqa uqalisa ukukhiqizwa kwekhodi kaHilt futhi udala isitsha sempande yohlelo lokusebenza.
Le ngxenye esezingeni eliphezulu ibalulekile ngoba ixhumeka kumjikelezo wokuphila wohlelo lokusebenza futhi isebenza njengesisekelo sazo zonke ezinye izingxenye ukufinyelela ukuncika okuchazwe kuleli zinga. Vele, ungakhohlwa ukubhalisa leli klasi kufayela le-AndroidManifest.xml usebenzisa isici segama, noma i-Hilt ngeke ibonwe nhlobo.
Ukufaka Ukuxhomekeka Kuzingxenye ze-Android
Uma uhlelo lokusebenza selulungile, singaqala ukufaka ukuncika emisebenzini, izingcezu, ukubuka, noma izinsizakalo. Ukuze senze lokhu, sisebenzisa isichasiselo se- @AndroidEntryPoint . Lokhu kutshela uHilt ukuthi leli klasi liyindawo yokungena nokuthi kufanele likhiqize ingxenye ethile yalo.
Uma sifuna ukuthola ukuncika okuthile ngaphakathi komsebenzi, sisebenzisa i-field injection nge-@Inject annotation. Kubaluleke kakhulu ukukhumbula ukuthi lezi zinsimu azikwazi ukuba zangasese ; uma uzama ukusebenzisa i-private modifier, i-compiler izophonsa iphutha ngaphandle kokungabaza. Endabeni ye-Jetpack Compose, ukumane ubhale amanothi ku-root Activity kusenza sikwazi ukufinyelela i-ViewModels ngqo ngaphakathi kwemisebenzi ye-composable.
Amasu Okuchaza Ukuxhumana
I-Hilt idinga ukwazi ukuthi ingazidala kanjani izinto esizicelayo. Indlela eqondile kakhulu i -constructor injection , lapho sibeka khona i-`@Inject` phambi kwe-class constructor. Lokhu kuvumela i-Hilt ukuthi ihlaziye amapharamitha futhi inqume ukuthi ingakunikeza kanjani lokho kuncika ngakunye.
Kodwa-ke, kunezimo lapho singenalo khona ukulawula okuphelele ekilasini, njengalapho kusetshenziswa amalabhulali angaphandle njenge-Retrofit noma i-OkHttpClient. Yilapho ama-Hilt Modules engena khona . I-module iyikilasi elichazwe nge-@Module futhi kumele ifake i-@InstallIn ukuze icacise ukuthi iyiphi ingxenye okufanele ifake lokho kuncika.
- Ukusetshenziswa kwe-@Provides: Lokhu kusetshenziswa uma ikilasi liyiqembu lesithathu noma lidinga iphethini yokwakha eyinkimbinkimbi. Lapha sichaza umsebenzi obuyisela isibonelo esidingekayo.
- Ukusebenzisa i-@Binds: Lena inketho ekahle uma sifuna ukuxhumanisa isikhombimsebenzisi nokusetshenziswa okuqondile. Ichazwa njengomsebenzi ongaqondakali otshela uHilt ukuthi: "uma othile ecela lesi sikhombimsebenzisi, mnike lokhu kusetshenziswa."
Ububanzi kanye nokuphathwa komjikelezo wokuphila
Ngokuzenzakalelayo, i-Hilt idala i-instance entsha isikhathi ngasinye lapho kucelwa ukuncika. Kodwa-ke, ngezinye izikhathi sidinga into ukuthi ihlale ifana kuyo yonke impilo yohlelo lokusebenza noma isikrini. Kulokhu, sisebenzisa ama-component scopes.
Uma simaka ikilasi nge- @Singleton bese silifaka ku-SingletonComponent, sizoba nesibonelo esisodwa somhlaba wonke. Uma sikhetha ukuthi into ikhona kuphela isikhathi somsebenzi, sisebenzisa i-@ActivityScoped ngaphakathi kwe-ActivityComponent. Kubalulekile ukungasebenzisi ngokweqile ama-scope, njengoba ukugcina izinto kwimemori isikhathi eside kungathinta kabi ukusebenza kohlelo lokusebenza.
Amacala Akhethekile kanye Neziqu
Ngezinye izikhathi sidinga ukufaka ukuqaliswa okubili okuhlukile kwesixhumi esifanayo. Ukuze sigweme ukucindezela i-compiler, sisebenzisa ama-qualifier . I-qualifier empeleni iyisichasiselo esenziwe ngokwezifiso esisetshenziselwa ukulebula ukubopha okuthile, okusivumela ukuthi sihlukanise, isibonelo, phakathi kweklayenti le-HTTP lokuqinisekisa kanye nelinye lezicelo ezijwayelekile.
Ngaphezu kwalokho, i-Hilt yenza izinto zibe lula ngezichasiso ezichazwe ngaphambilini njenge- @ApplicationContext kanye ne-@ActivityContext, okusivumela ukuthi sithole umongo we-Android ngaphandle kokuhlela amamojula ngesandla. Okokugcina, ngezigaba i-Hilt engawasekeli ngokwemvelo (njenge-ContentProviders), singasebenzisa isichasiso se-@EntryPoint , sidale ibhuloho elenziwe ngesandla ukuze sikhiphe ukuncika kugrafu ye-Hilt. Yabelana ngalolu lwazi ukuze abasebenzisi abaningi bafunde ngalo.