Hilt, diğer Jetpack kitaplıklarındaki dersleri vermeye 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. Örneğin, bağımlılık ekleme hakkında daha fazla bilgi için Hilt.
Hilt ile ViewModel nesnelerini ekleme
Not ekleyerek bir ViewModel
sağlayın
@HiltViewModel
ile ve ViewModel
içinde @Inject
ek açıklamasını kullanarak
nesnesinin kurucusu.
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; } ... }
Böylece, @AndroidEntryPoint
ek açıklaması olan bir etkinlik veya parça
ViewModel
örneğini ViewModelProvider
veya
by viewModels()
KTX uzantıları:
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 ViewModelleri, aşağıdakini izleyen ViewModelComponent
tarafından sağlanır:
ViewModel
ile aynı yaşam döngüsü vardır ve dolayısıyla yapılandırma değişikliklerine dayanabilir.
Bir ViewModel
bağımlılığının kapsamını belirlemek için @ViewModelScoped
ek açıklamasını kullanın.
@ViewModelScoped
türü, kapsama alınan tek bir örneğinin bunu
type, ViewModel
öğesine eklenen tüm bağımlılıklarda sağlanır.
Kapsamlı örneği isteyen diğer ViewModel örnekleri alır
görebilirsiniz.
Tek bir örneğin çeşitli ViewModel'ler arasında paylaşılması gerekiyorsa bu örnek,
@ActivityRetainedScoped
veya @Singleton
kullanılarak kapsama alınmalıdır.
Jetpack navigasyon kitaplığıyla entegrasyon
Gradle dosyanıza şu ek bağımlılıkları ekleyin:
Eski
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
ViewModel
metriğiniz gezinme kapsamında ise
grafik,
aşağıdaki parçalarla çalışan hiltNavGraphViewModels
işlevini kullanın:
@AndroidEntryPoint
ile notlandırıldı.
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 Oluşturma ve diğer kitaplıklar.
WorkManager'ı Hilt ile ekleme
Gradle dosyanıza aşağıdaki ek bağımlılıkları ekleyin. Not: ek açıklama işlemcisi eklemeniz gerekir. ek açıklama işlemcisinin üstünde çalışan bir kod snippet'i ekleyin:
Eski
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") }
Şunu kullanarak bir Worker
ekleyin:
Sınıfta @HiltWorker
ve Worker
kategorisinde @AssistedInject
ek açıklama
nesnesinin kurucusu. Şu öğede yalnızca @Singleton
veya kapsamı belirlenmemiş bağlamaları kullanabilirsiniz:
Worker
nesne. Context
ve WorkerParameters
için de ek açıklama sağlamanız gerekir
@Assisted
içeren bağımlılıklar:
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ı oluşturun.
Configuration.Provider
arayüzünü uygulayın,
HiltWorkFactory
ve aşağıdaki gibi WorkManager
yapılandırmasına aktarı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(); } }