Hilt menyertakan ekstensi untuk menyediakan class dari library Jetpack lainnya. Saat ini, Hilt mendukung komponen Jetpack berikut:
ViewModel
- Navigasi
- Compose
- WorkManager
Anda harus menambahkan dependensi Hilt untuk memanfaatkan integrasi ini. Untuk mengetahui informasi selengkapnya tentang menambahkan dependensi, lihat Injeksi dependensi dengan Hilt.
Menginjeksikan objek ViewModel dengan Hilt
Berikan ViewModel
dengan menganotasinya
menggunakan @HiltViewModel
dan menggunakan anotasi @Inject
dalam konstruktor objek
ViewModel
.
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; } ... }
Kemudian, aktivitas atau fragmen yang dianotasi dengan @AndroidEntryPoint
bisa
mendapatkan instance ViewModel
seperti biasa menggunakan ekstensi KTX ViewModelProvider
atau
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); } ... }
@ViewModelScoped
Semua ViewModel Hilt disediakan oleh ViewModelComponent
yang mengikuti
siklus proses yang sama dengan ViewModel
, dan dengan demikian, dapat bertahan saat terjadi perubahan konfigurasi.
Untuk mencakup dependensi ke ViewModel
, gunakan anotasi @ViewModelScoped
.
Jenis @ViewModelScoped
akan menjadikannya agar satu instance dari jenis
cakupan diberikan di semua dependensi yang dimasukkan ke dalam ViewModel
.
Instance ViewModel lain yang meminta instance dengan cakupan akan menerima
instance yang berbeda.
Jika satu instance perlu dibagikan ke berbagai ViewModel, instance
harus dicakup menggunakan @ActivityRetainedScoped
atau @Singleton
.
Integrasi dengan library navigasi Jetpack
Tambahkan dependensi tambahan berikut ke file Gradle Anda:
Groovy
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
Jika ViewModel
disertakan ke grafik
navigasi,
gunakan fungsi hiltNavGraphViewModels
yang dapat digunakan dengan fragmen yang
dianotasi dengan @AndroidEntryPoint
.
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)
Integrasi dengan Jetpack Compose
Untuk melihat cara Hilt berintegrasi dengan Jetpack Compose, lihat bagian Hilt Compose dan library lainnya.
Menginjeksikan WorkManager dengan Hilt
Tambahkan dependensi tambahan berikut ke file Gradle Anda. Perhatikan bahwa selain library, Anda juga perlu menyertakan pemroses anotasi tambahan yang berfungsi mendukung pemroses anotasi Hilt:
Groovy
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") }
Injeksikan Worker
menggunakan
anotasi @HiltWorker
di class dan @AssistedInject
di konstruktor objek
Worker
. Anda hanya dapat
menggunakan @Singleton
atau binding tidak tercakup dalam
objek Worker
. Anda juga harus menganotasi dependensi Context
dan WorkerParameters
dengan @Assisted
:
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; } ... }
Kemudian, minta class Application
Anda
mengimplementasikan antarmuka Configuration.Provider
, memasukkan instance HiltWorkFactory
, dan meneruskannya ke dalam konfigurasi
WorkManager
sebagai berikut:
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(); } }