Hilt menyertakan ekstensi untuk menyediakan kelas dari library Jetpack lainnya. Saat ini, Hilt mendukung komponen Jetpack berikut:
ViewModel
WorkManager
Anda harus menambahkan dependensi Hilt untuk memanfaatkan integrasi ini. Untuk informasi selengkapnya tentang menambahkan dependensi, lihat Injeksi dependensi dengan Hilt.
Menginjeksikan objek ViewModel 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:
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'
}
Sediakan ViewModel
menggunakan anotasi
@ViewModelInject
dalam konstruktor objek ViewModel
. Anda juga harus
menganotasi dependensi SavedStateHandle
dengan @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; } ... }
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); } ... }
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:
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'
}
Injeksikan Worker
menggunakan anotasi
@WorkerInject
dalam konstruktor objek Worker
. Anda hanya dapat
menggunakan @Singleton
atau binding tak terbatas dalam objek Worker
. Anda juga harus
menganotasi dependensi Context
dan WorkerParameters
dengan @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; } ... }
Kemudian, minta class Application
Anda mengimplementasikan antarmuka Configuration.Provider
,
menginjeksikan instance HiltWorkFactory
, dan memasukkannya 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 Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }