Hilt में, अन्य Jetpack लाइब्रेरी से क्लास देने के लिए एक्सटेंशन शामिल हैं. Hilt, फ़िलहाल इन Jetpack कॉम्पोनेंट के साथ काम करता है:
ViewModel
- नेविगेशन
- Compose
- WorkManager
इन इंटिग्रेशन का फ़ायदा पाने के लिए, आपको Hilt डिपेंडेंसी जोड़नी होगी. इसके लिए डिपेंडेंसी जोड़ने के बारे में ज़्यादा जानकारी, देखें डिपेंडेंसी इंजेक्शन हिलना.
Hilt की मदद से ViewModel ऑब्जेक्ट इंजेक्ट करें
एनोटेट करके ViewModel
उपलब्ध कराएं
इसे @HiltViewModel
के साथ और ViewModel
में @Inject
एनोटेशन का इस्तेमाल करके दिखाया गया है
ऑब्जेक्ट का कंस्ट्रक्टर है.
@HiltViewModel
class ExampleViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
private val repository: ExampleRepository
) : ViewModel() {
...
}
@HiltViewModel
public class ExampleViewModel extends ViewModel {
private final ExampleRepository repository;
private final SavedStateHandle savedStateHandle;
@Inject
ExampleViewModel(
SavedStateHandle savedStateHandle,
ExampleRepository repository)
{
this.savedStateHandle = savedStateHandle;
this.repository = repository;
}
...
}
इसके बाद, @AndroidEntryPoint
के साथ एनोटेट की गई कोई गतिविधि या फ़्रैगमेंट ये कर सकता है
ViewModelProvider
का इस्तेमाल करके सामान्य तरीके से ViewModel
इंस्टेंस पाएं या
by viewModels()
KTX एक्सटेंशन:
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
private val exampleViewModel: ExampleViewModel by viewModels()
...
}
@AndroidEntryPoint
public class ExampleActivity extends AppCompatActivity {
private ExampleViewModel exampleViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class);
}
...
}
@ViewModelScoped
सभी Hilt ViewModels, ViewModelComponent
से उपलब्ध कराए जाते हैं. ये मॉडल:
ViewModel
की ही तरह लाइफ़साइकल होने पर, कॉन्फ़िगरेशन में होने वाले बदलावों से बचा जा सकता है.
किसी डिपेंडेंसी को ViewModel
पर लागू करने के लिए, @ViewModelScoped
एनोटेशन का इस्तेमाल करें.
@ViewModelScoped
टाइप से यह तय होता है कि स्कोप वाले एक इंस्टेंस को
टाइप, ViewModel
में डाली गई सभी डिपेंडेंसी के लिए दिया जाता है.
ViewModel के अन्य इंस्टेंस, जो स्कोप वाले इंस्टेंस का अनुरोध करते हैं, ये मिलेंगे
कोई दूसरा इंस्टेंस.
अगर किसी एक इंस्टेंस को अलग-अलग ViewModels पर शेयर करना ज़रूरी हो, तो
@ActivityRetainedScoped
या @Singleton
का इस्तेमाल करके दायरे में होना चाहिए.
Jetpack नेविगेशन लाइब्रेरी के साथ इंटिग्रेशन
अपनी Gradle फ़ाइल में ये अतिरिक्त डिपेंडेंसी जोड़ें:
app/build.gradle
dependencies {
...
implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'
}
dependencies {
...
implementation("androidx.hilt:hilt-navigation-fragment:1.0.0")
}
अगर आपका ViewModel
नेविगेशन के दायरे में है
ग्राफ़,
उन फ़्रैगमेंट के साथ काम करने वाले hiltNavGraphViewModels
फ़ंक्शन का इस्तेमाल करें जिन्हें
@AndroidEntryPoint
के साथ बनाई गई.
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph);
ExampleViewModel exampleViewModel = new ViewModelProvider(
backStackEntry,
HiltViewModelFactory.create(context, backStackEntry)
).get(ExampleViewModel.class)
Jetpack Compose के साथ इंटिग्रेशन
यह देखने के लिए कि Hilt, Jetpack Compose के साथ इंटिग्रेट होता है, लिखें और अन्य लाइब्रेरी.
WorkManager को Hilt की मदद से इंजेक्ट करें
अपनी Gradle फ़ाइल में ये अतिरिक्त डिपेंडेंसी जोड़ें. ध्यान दें कि लाइब्रेरी के अलावा, आपको एक अतिरिक्त एनोटेशन प्रोसेसर शामिल करना होगा, जो Hilt एनोटेशन प्रोसेसर के ऊपर काम करता है:
app/build.gradle
dependencies {
...
implementation 'androidx.hilt:hilt-work:1.0.0'
// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0'
// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0'
}
dependencies {
implementation("androidx.hilt:hilt-work:1.0.0")
// When using Kotlin.
kapt("androidx.hilt:hilt-compiler:1.0.0")
// When using Java.
annotationProcessor("androidx.hilt:hilt-compiler:1.0.0")
}
Worker
को इंजेक्ट करने के लिए,
क्लास में @HiltWorker
और Worker
में @AssistedInject
एनोटेशन
ऑब्जेक्ट का कंस्ट्रक्टर है. आप इसमें सिर्फ़ @Singleton
या अनस्कोप वाली बाइंडिंग का इस्तेमाल कर सकते हैं
Worker
ऑब्जेक्ट. आपको Context
और WorkerParameters
के बारे में भी बताना होगा
@Assisted
के साथ डिपेंडेंसी:
@HiltWorker
class ExampleWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }
@HiltWorker
public class ExampleWorker extends Worker {
private final WorkerDependency workerDependency;
@AssistedInject
ExampleWorker(
@Assisted @NonNull Context context,
@Assisted @NonNull WorkerParameters params,
WorkerDependency workerDependency
) {
super(context, params);
this.workerDependency = workerDependency;
}
...
}
इसके बाद, अपनी Application
क्लास में शामिल हों
Configuration.Provider
इंटरफ़ेस को लागू करें. साथ ही, इसका एक इंस्टेंस इंजेक्ट करें
HiltWorkFactory
, और इसे WorkManager
कॉन्फ़िगरेशन में इस तरह पास करें:
@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
@HiltAndroidApp
public class ExampleApplication extends Application implements Configuration.Provider {
@Inject HiltWorkerFactory workerFactory;
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setWorkerFactory(workerFactory)
.build();
}
}