Hilt, diğer Jetpack kitaplıklarından sınıf sağlamaya yönelik uzantılar içerir. Hilt şu anda aşağıdaki Jetpack bileşenlerini desteklemektedir:
ViewModel
- Navigasyon
- Oluştur
- WorkManager
Bu entegrasyonlardan yararlanmak için Hilt bağımlılıklarını eklemeniz gerekir. Bağımlılık ekleme hakkında daha fazla bilgi için Hilt ile bağımlılık ekleme bölümüne bakın.
Hilt ile ViewModel nesnelerini ekleme
@HiltViewModel
ile açıklama ekleyerek ve ViewModel
nesnesinin oluşturucuda @Inject
ek açıklamasını kullanarak bir ViewModel
sağlayın.
Kotlin
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Java
@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; } ... }
Daha sonra, @AndroidEntryPoint
ile ek açıklama eklenmiş bir etkinlik veya parça, ViewModelProvider
veya by viewModels()
KTX uzantılarını kullanarak ViewModel
örneğini normal şekilde alabilir:
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Java
@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
Tüm Hilt ViewModel'ler, ViewModel
ile aynı yaşam döngüsünü takip eden ViewModelComponent
tarafından sağlanır ve yapılandırma değişikliklerinden dayanabilir.
Bir bağımlılığı ViewModel
kapsamına almak için @ViewModelScoped
ek açıklamasını kullanın.
@ViewModelScoped
türü, ViewModel
içine yerleştirilen tüm bağımlılıklarda kapsamlı türün tek bir örneğinin sağlanmasını sağlar.
Kapsamlı örneği isteyen bir ViewModel'in diğer örnekleri farklı bir örnek alır.
Tek bir örneğin çeşitli ViewModel'lerde paylaşılması gerekiyorsa bunun kapsamı @ActivityRetainedScoped
veya @Singleton
kullanılarak belirlenmelidir.
Jetpack navigasyon kitaplığıyla entegrasyon
Gradle dosyanıza aşağıdaki ek bağımlılıkları ekleyin:
Modern
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
ViewModel
öğeniz gezinme grafiğinin kapsamındaysa @AndroidEntryPoint
ek açıklamasına sahip parçalarla çalışan hiltNavGraphViewModels
işlevini kullanın.
Kotlin
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
Java
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); ExampleViewModel exampleViewModel = new ViewModelProvider( backStackEntry, HiltViewModelFactory.create(context, backStackEntry) ).get(ExampleViewModel.class)
Jetpack Compose ile entegrasyon
Hilt'in Jetpack Compose ile nasıl entegre olduğunu görmek için Compose ve diğer kitaplıklar'ın Hilt bölümüne bakın.
WorkManager'a Hilt ekleme
Aşağıdaki ek bağımlılıkları Gradle dosyanıza ekleyin. Kitaplığa ek olarak, Hilt ek açıklama işlemcisinin üzerinde çalışan ek bir ek açıklama işlemcisi eklemeniz gerektiğini unutmayın:
Modern
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' }
Kotlin
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") }
Sınıfta @HiltWorker
ek açıklamasını, Worker
nesnesinin oluşturucusunda @AssistedInject
kullanarak bir Worker
ekleyin. Worker
nesnelerinde yalnızca @Singleton
veya kapsamsız bağlamaları kullanabilirsiniz. Ayrıca Context
ve WorkerParameters
bağımlılıklarına @Assisted
ile ek açıklama eklemeniz gerekir:
Kotlin
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Java
@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; } ... }
Ardından, Application
sınıfınızın Configuration.Provider
arayüzünü uygulamasını, HiltWorkFactory
örneğini eklemesini ve WorkManager
yapılandırmasına aşağıdaki gibi iletmesini sağlayın:
Kotlin
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
Java
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }