于今腐草无萤火,终古垂杨有暮鸦。这篇文章主要讲述#yyds干货盘点# JetPack | Hilt-依赖注入框架上手指南相关的知识,希望能为你提供帮助。
文章图片
Hilt 是Google 最新的依赖注入框架,其是基于Dagger研发,但它不同于Dagger。对于android开发者来说,Hilt可以说专门为Android 打造,提供了一种将Dagger依赖项注入到Android应用程序的标准方法,而且创建了一组标准的组件和作用域,这些组件会自动集成到Android应用程序的各个生命周期中,以简化开发者的上手难度。
相应的一些注解如下:
- @HiltAndroidApp
触发Hilt的代码生成,包括适用于应用程序的基类,可以使用依赖注入,应用程序容器是应用程序的父容器,这意味着其他容器可以访问其提供的依赖项。
- @AndroidEntryPoint
其会创建一个依赖容器,该容器遵循Android类的生命周期
- @Inject
【#yyds干货盘点# JetPack | Hilt-依赖注入框架上手指南】用来注入的字段,其类型不能为Private
如果要告诉 Hilt如何提供相应类型的实例,需要将@Inject添加到要注入的类的构造函数中。
Hilt有关如何提供不同类型的实例的信息也称为绑定。
- @Install(xx)
Install 用来告诉 Hilt 这个模块会被安装到哪个组件上.
Compenent | Injector for |
---|---|
ApplicationComponent |
Application |
ActivityRetainedComponent |
ViewModel (请参阅JetPack-ViewModel扩展) |
ActivityComponent |
Activity |
FragmentComponent |
Fragment |
ViewComponent |
View |
ViewWithFragmentComponent |
View 与 @WithFragmentBindings |
ServiceComponent |
Service |
FragmentActivity
(如AppCompatActivity
)的活动和扩展Jetpack库的片段Fragment
,而不支持Fragment
Android平台(现已弃用)的 片段 。组件(Compenent)的生命周期
- 它限制了在创建组件和生成组件范围绑定的生命周期
- 它指示合适可以使用成员注入的值。(例如:当@Inject 字段不为null时)
Component | 作用范围 | Created at | Destroyed at |
---|---|---|---|
ApplicationComponent |
@Singleton |
Application#onCreate() |
Application#onDestroy() |
ActivityRetainedComponent |
@ActivityRetainedScope |
Activity#onCreate() 1 |
Activity#onDestroy() 1 |
ActivityComponent |
@ActivityScoped |
Activity#onCreate() |
Activity#onDestroy() |
FragmentComponent |
@FragmentScoped |
Fragment#onAttach() |
Fragment#onDestroy() |
ViewComponent |
@ViewScoped |
View#super() |
View destroyed |
ViewWithFragmentComponent |
@ViewScoped |
View#super() |
View destroyed |
ServiceComponent |
@ServiceScoped |
Service#onCreate() |
Service#onDestroy() |
@Singletion
class TestCompenent @Inject constructor()
如何使用?先导入依赖
implementation com.google.dagger:hilt-android:2.28-alpha
kapt com.google.dagger:hilt-android-compiler:2.28-alpha
classpath com.google.dagger:hilt-android-gradle-plugin:2.28-alpha
相应的model下增加
apply plugin: dagger.hilt.android.plugin
举个
推荐阅读
- #yyds干货盘点# HCIE-Security Day11(初步学习防火墙双机热备和VGMP概念)
- #yyds干货盘点#spring-cloud-kubernetes官方demo运行实战
- Redis 在 vivo 推送平台的应用与优化实践
- #yyds干货盘点#数据分析实际案例之(pandas在泰坦尼特号乘客数据中的使用)
- 在C中将数字转换为字符串的最佳方法是什么()
- PHP中的echo、print和print_r有什么区别()
- PHP中的public、private和protected有什么区别()
- 如何解决invalid literal for int() with base((已解决))
- C语言的函数原型的目的是什么(如何理解?)