Hilt'i diğer Jetpack kitaplıklarıyla kullanma

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:

app/build.gradle

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:

app/build.gradle

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();
  }
}