Hilt כולל תוספים לאספקת כיתות מספריות אחרות של Jetpack. בשלב הזה, Hilt תומך ברכיבי Jetpack הבאים:
ViewModel
- ניווט
- פיתוח נייטיב
- מנהל עבודה
חייבים להוסיף את יחסי התלות של Hilt כדי לנצל את השילובים האלה. עבור למידע נוסף על הוספת יחסי תלות, ראו החדרת תלות באמצעות עילית.
החדרת אובייקטים של ViewModel באמצעות Hilt
מוסיפים ViewModel
בהערה
אותו עם @HiltViewModel
ושימוש בהערה @Inject
בViewModel
של ה-constructor של האובייקט.
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; } ... }
לאחר מכן, פעילות או מקטע שיש להם הערות עם @AndroidEntryPoint
יכולים
מקבלים את המופע של ViewModel
כרגיל באמצעות ViewModelProvider
או
by viewModels()
תוספי KTX:
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
כל המודלים של Hilt ViewModel מסופקים על ידי ה-ViewModelComponent
לפי
אותו מחזור חיים כמו ViewModel
, ולכן הוא יכול לשרוד שינויים בתצורה.
כדי להגביל את התלות ב-ViewModel
, צריך להשתמש בהערה @ViewModelScoped
.
סוג @ViewModelScoped
יהפוך למופע אחד של ההיקף
השדה 'סוג' מסופק בכל יחסי התלות שמוחדרים אל ViewModel
.
מופעים אחרים של ViewModel שמבקשים את המכונה של ההיקף יקבלו
מופע אחר.
אם צריך לשתף מופע אחד בין מודלים שונים של ViewModels,
צריך להיות בהיקף של @ActivityRetainedScoped
או @Singleton
.
שילוב עם ספריית הניווט של Jetpack
מוסיפים את יחסי התלות הנוספים הבאים לקובץ Gradle:
מגניב
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
אם ViewModel
הוא היקף הניווט
תרשים,
להשתמש בפונקציה hiltNavGraphViewModels
שפועלת עם מקטעים
נוספו הערות עם @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)
שילוב עם Jetpack Compose
כדי לראות את השילוב של Hilt עם Jetpack Compose, אתם יכולים לעיין בקטע Hilt ב פיתוח נייטיב וספריות אחרות.
החדרת WorkManager עם Hilt
מוסיפים את יחסי התלות הנוספים הבאים לקובץ Gradle. שימו לב שב- בנוסף לספרייה, צריך לכלול מעבד הערות נוסף שפועל מעל מעבד ההערות Hilt:
מגניב
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") }
החדרת Worker
באמצעות
הערה @HiltWorker
במחלקה ו-@AssistedInject
ב-Worker
של ה-constructor של האובייקט. אפשר להשתמש רק ב-@Singleton
או בקישורים לא היקפיים
Worker
אובייקטים. עליך להוסיף גם הערות לContext
ולWorkerParameters
של יחסי התלות עם @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; } ... }
לאחר מכן, צריך ליצור את הכיתה Application
להטמיע את הממשק Configuration.Provider
, להחדיר מופע של
HiltWorkFactory
, ומעבירים אותו להגדרות האישיות של WorkManager
באופן הבא:
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(); } }