Android: Tìm hiểu về Hilt

Tram Ho

Dependency injection (DI) là một công nghệ được sử dụng rộng rãi trong lập trình và rất phù hợp khi lập trình android, nơi các phụ thuộc được cung cấp cho class thay vì tạo ra chúng. Bằng cách tuân theo các nguyên tắc DI, ta tạo một nền tảng tốt cho ứng dụng của mình với khả năng sử dụng lại đoạn code lớn và dễ dàng testing. Đã bao giờ bạn thử inject phụ thuộc thủ công bằng code chưa? Ngay cả nhiều thư viên dependency injection hiện có ngày nay, nó đòi hỏi rất nhiều đoạn code khi dự án ngày càng trở nên lớn, vì ta phải xây dựng mọi class và các phụ thuộc của nó bằng tay, và tao ra các container để sử dụng và quản lý phụ thuộc

Với thư viện Hilt đinh nghĩa một các tiêu chuẩn để thực hiện DI trong ứng dụng của bạn bằng cách cung cấp các container trong mọi class Android trong dự án của bạn và tự động quản lý vòng đời của chúng cho bạn.

Hilt được xây dụng dựa trên một thư viện DI nổi tiếng là Dagger, vì vậy nó thừa hưởng từ tính chính xác về thời gian biên dịch, runtime performance, khả năng mở rộng và hỗ trợ Android Studio mà Dagger cung cấp. Vì điều này Dagger chiếm 74% trong 10k ứng dụng hàng đầu trong Google Play. Tuy nhiên, do việc tạo mã thời gian biên dịch nên thời gian build ứng dụng tăng lên

Do nhiều class framework android được tạo bởi chính hệ điều hành. nên có một bản tóm tắt liên quan khi sử dụng Dagger trong các ứng dụng Android. Không giống như Dagger, Hilt được tích hợp với các thư viện Jetpack và framework class và loại bỏ hầu hết các bản mẫu để cho phép bạn tập trung vào các phân quan trọng của việc xác định và ịnect các dependecy mà không phải lo lắng về việc quản lí tất cả các setup và cầu nối của Dagger. Nó sẽ tự động tạo và cung cấp

  • Các components để tích hợp Android framework class với Dagger mà bạn cần phải tạo bằng tay
  • Scope annotations cho các thành phần được Hilt tạo tự động
  • Predefined bindings and qualifiers.

Vì Dagger và Hilt đều có thể cùng tồn tại nên ta có thể dễ dàng migrated khi cần thiết

Hint in action

Ở ví dụ này mình sẽ chỉ ra cho các bạn Hilt dễ sử dụng đến mức nào bằng việc inject AnalyticsAdapter vào MainActivity

Đầu tiền, enable Hilt trong ứng dụng của bạn bằng annotation HiltAndroidApp kích hoạt việc Hilt gen code

Thứ hai, bảo Hilt làm cách nào để cung cấp instance của AnalyticsAdapter bằng annotating với constructor với Inject

Để inject instance của AnalyticsAdapter vào MainActivity, enable Hilt trong activity với annotation AndroidEntryPoint và thực hiện injection bằng annotation Inject

Hilt với Jetpack support

Bạn có thể sử dụng các thư viện Jetpack yêu thích của mình với Hilt . Hilt đã hỗ trợ cung cấp injection trực tiếp cho ViewModel và WorkManager

Ví dụ, để inject LoginViewModel vào LoginActivity: annotate LoginViewModel với ViewModelnject và sử dụng nó trong activity và fragment mong muốn

Start using Hilt

Để tìm hiểu về hilt trong ứng dụng Android bạn có thể đọc doc này

Nếu chưa quen với DI hoặc Dagger hãy xem guide này để thêm Hilt vào ứng dụng android

Nếu bạn đã sử dụng Dagger thì có thể migrating sang Hilt với doc này

Đây là một project sử dụng Hilt : https://github.com/android/architecture-samples/tree/dev-hilt

Còn đây là một số annotation trong Hilt

References: https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo