استخدام Hilt مع مكتبات Jetpack الأخرى

يتضمّن Hilt إضافات لتوفير صفوف من مكتبات Jetpack الأخرى. يتوافق Hilt حاليًا مع مكونات Jetpack التالية:

  • ViewModel
  • التنقّل
  • إنشاء
  • مدير العمل

ويجب إضافة تبعيات Hilt للاستفادة من عمليات الدمج هذه. لمزيد من المعلومات حول إضافة التبعيات، يُرجى الاطّلاع على إدخال التبعية باستخدام Hilt.

إدخال كائنات ViewModel باستخدام Hilt

يمكنك توفير ViewModel من خلال إضافة تعليق توضيحي إليه باستخدام @HiltViewModel واستخدام التعليق التوضيحي @Inject في الدالة الإنشائية لكائن 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;
  }
  ...
}

بعد ذلك، يمكن لأي نشاط أو جزء تمت إضافة تعليقات توضيحية إليه باستخدام @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 ViewModels من خلال ViewModelComponent التي تتّبع دورة حياة ViewModel نفسها، وبالتالي يمكنها الصمود في التغييرات التي تطرأ على الإعدادات. لتحديد نطاق التبعية إلى ViewModel، استخدِم التعليق التوضيحي @ViewModelScoped.

يجعل النوع @ViewModelScoped متوافقًا بحيث يتم توفير مثيل واحد من النوع النطاق عبر جميع التبعيات التي تم إدخالها في ViewModel. ستتلقى الحالات الأخرى من ViewModel التي تطلب مثيل النطاق مثيلاً مختلفًا.

إذا كان هناك حاجة إلى مشاركة مثيل واحد على مستوى نماذج عرض مختلفة، يجب تحديد نطاقه باستخدام @ActivityRetainedScoped أو @Singleton.

التكامل مع مكتبة التنقّل في Jetpack

أضف التبعيات الإضافية التالية إلى ملف Gradle:

app/build.grale

رائع

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:

app/build.grale

رائع

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. يمكنك استخدام عمليات الربط @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();
  }
}