Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Hilt y las integraciones de Jetpack

Hilt incluye extensiones para proporcionar clases de otras bibliotecas de Jetpack. Por el momento, Hilt admite los siguientes componentes de Jetpack:

  • ViewModel
  • WorkManager

Debes agregar las dependencias de Hilt para aprovechar estas integraciones. Para obtener más información sobre cómo agregar dependencias, consulta Inyección de dependencias con inserción.

Cómo inyectar objetos ViewModel con Hilt

Agrega las siguientes dependencias adicionales a tu archivo de Gradle. Ten en cuenta que, además de la biblioteca, debes incluir un procesador de anotaciones adicional que funcione con el procesador de anotaciones de Hilt:

app/build.gradle

...
dependencies {
  ...
  implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
  // When using Kotlin.
  kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
  // When using Java.
  annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

Proporciona un ViewModel con la anotación @ViewModelInject en el constructor del objeto ViewModel. También debes anotar la dependencia SavedStateHandle con @Assisted:

Kotlin

class ExampleViewModel @ViewModelInject constructor(
  private val repository: ExampleRepository,
  @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
  ...
}

Java

public class ExampleViewModel extends ViewModel {

  private final ExampleRepository repository;
  private final SavedStateHandle savedStateHandle;

  @ViewModelInject
  ExampleViewModel(
      ExampleRepository repository,
      @Assisted SavedStateHandle savedStateHandle)
    {
    this.repository = repository;
    this.savedStateHandle = savedStateHandle;
  }
  ...
}

Luego, una actividad o un fragmento anotado con @AndroidEntryPoint puede obtener la instancia de ViewModel de la forma habitual usando ViewModelProvider o las extensiones KTX de by viewModels():

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

Cómo inyectar objetos WorkManager con Hilt

Agrega las siguientes dependencias adicionales a tu archivo de Gradle. Ten en cuenta que, además de la biblioteca, debes incluir un procesador de anotaciones adicional que funcione con el procesador de anotaciones de Hilt:

app/build.gradle

...
dependencies {
  ...
  implementation 'androidx.hilt:hilt-work:1.0.0-alpha01'
  // When using Kotlin.
  kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
  // When using Java.
  annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

Inyecta un Worker con la anotación @WorkerInject en el constructor del objeto Worker. Solo puedes usar objetos @Singleton o vinculaciones sin alcance en objetos Worker. También debes anotar las dependencias Context y WorkerParameters con @Assisted:

Kotlin

class ExampleWorker @WorkerInject constructor(
  @Assisted appContext: Context,
  @Assisted workerParams: WorkerParameters,
  workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }

Java

public class ExampleWorker extends Worker {

  private final WorkerDependency workerDependency;

  @WorkerInject
  ExampleWorker(
    @Assisted @NonNull Context context,
    @Assisted @NonNull WorkerParameters params,
    WorkerDependency workerDependency
  ) {
    super(context, params);
    this.workerDependency = workerDependency;
  }
  ...
}

Luego, haz que tu clase Application implemente la interfaz Configuration.Provider, inyecta una instancia de HiltWorkFactory y pásala a la configuración WorkManager de la siguiente manera:

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 Configuration.Builder()
             .setWorkerFactory(workerFactory)
             .build();
  }
}