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

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:

app/build.gradle

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:

app/build.gradle

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