Hilt 稳定版发布 | 更便捷的 Android 依赖项注入
Hilt 是 Jetpack 推荐使用的 Android 应用 依赖项注入 (DI) 解决方案,现已 稳定。这意味着 Hilt 已经完全可以在 生产环境 中使用。Hilt 相比 Dagger 更加便捷,同时也能帮您减少模板代码,它专为 Android 而生,并集成了多个 Jetpack 依赖库。很多公司已在他们的应用中使用了 Hilt 并从中获益。
2020 年 6 月,Hilt 首次发布 预览版,它肩负着定义 Android 依赖项注入 标准方案 的使命,也是自那时起,我们收到了来自开发者的海量反馈。这些反馈不仅改善了 Hilt,而且使我们明确了我们走在正确的道路上。
Hilt 无需手动创建依赖项关系图,也无需手动注入并传递类型,而是在编译期自动根据注解生成所需代码。Hilt 通过实现工作中的复杂部分以及生成所有模板代码替代手动编写,帮您从 DI 的最佳实践中获得最大收益。此外,Hilt 与 Android 完全集成,可以帮助您自动管理 Android Framework 类的依赖项关系图的生命周期。
让我们通过一个简单示例观察 Hilt 的行为!配置 Hilt 之后,在项目中从无到有地向 Activity 注入ViewModel 就像在代码中添加注解一样容易,如下所示:
@HiltAndroidApp // 在应用中配置 Hilt
class MyApplication : Application() { ... }
// 使 Hilt 识别该 ViewModel
@HiltViewModel
class LoginViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
/*…Hilt 关注的其他依赖项... */
) : ViewModel() { ... }
// 使该 Activity 使用正确的 ViewModel 工厂,并注入其他依赖项
@AndroidEntryPoint
class LoginActivity : AppCompatActivity() {
private val loginViewModel: LoginViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// loginViewModel 已经可以使用
}
}
除了上述内容,让您在应用中选择使用 Hilt 还有哪些理由呢?
比 Dagger 更便捷
Hilt 基于流行的 DI 库 Dagger 构建,因此可以从 Dagger 提供的编译期校验、良好的运行时性能、扩展性以及 Android Studio 支持 中受益。一些 Dagger 注解也常用于 Hilt,例如 @Inject (告知 Dagger/Hilt 如何提供一个类型的实例)。但是 Hilt 要比 Dagger 更便捷。
我强烈推荐利用 Dagger 在 Android 应用中进行依赖项注入,然而单纯地使用 Dagger 可能导致在创建时内存占用过多。当这与 Android 开发中各种复杂的可感知生命周期组件一起使用时,就可能出现很多陷阱,例如内存泄漏: 作用域为 Activity 的依赖项被意外地传递到 ViewModel 中。专为 Android 量身定制的 Hilt 可以帮助您避开 Dagger 基本使用的一些陷阱。
——Tinder 资深软件工程师 Marcelo Hernandez
如果您已经在应用中使用了 Dagger,并且希望迁移到 Hilt,无需担心!Dagger 和 Hilt 可以共存,应用可以基于需要进行 迁移。
更少的模板代码
Hilt 是被定制过的——这意味着为了减少您编写代码,它替您做了一些决定。Hilt 定义了标准组件及依赖关系图,并且完全集成了 Android Framework 中的类,例如: Application、Activity、Fragment、View,还定义了限制类型实例的作用域到这些组件的作用域注解。
通过 @HiltAndroidTest 注解,Hilt 可以自动生成测试应用以及测试组件。迁移到 Hilt 之后,我们可以删除 20% - 40% 的测试相关模板代码。
——YouTube 软件工程师 Jusun Lee
我们仅是在 Hilt 迁移上做了浅层工作。然而,我们在其中一个迁移到 Hilt 的模块,看到了代码行数 +72/-182 的变化。
——Tinder 资深软件工程师 Marcelo Hernandez
为 Android 量身定制
不同于 Java 编程语言应用的依赖项注入解决方案 Dagger,Hilt 仅支持 Android 应用。一些注解专供 Hilt 使用,并定义了专有的 Android DI 方式,这些注解包括: @HiltAndroidApp
、@AndroidEntryPoint
、@HiltViewModel
。
最终,Hilt 提供了内置的可识别 Android 生命周期的 Dagger 组件。使用 Hilt,我们可以只关注 Dagger @Modules,而不必担心组件,子组件以及组件提供程序的模式等。
—— Tinder 资深软件工程师 Marcelo Hernandez
组件及绑定的标准化
不同于对 Dagger 的认识,Hilt 采用了 单组件系统 来简化依赖项关系图,使编译期生成更少的代码。
通过 Hilt 的单组件系统,仅一次提供绑定定义,就可以在所有使用该组件的类中共享。这比之前有着很大的提升,YouTube 曾使用多组件系统,模块需要手动连接到自定义组件中,并且存在很多重复的绑定定义。
——YouTube 软件工程师 Jusun Lee
由于我们的 Gradle 模块分离允许隔离开发功能,这使得我们使用 Dagger 时容易过于灵活。我们发现,将这些模块迁移到 Hilt 暴露出我们无意间违反了关注点分离的缺陷。
——Tinder 资深软件开发工程师 Marcelo Hernandez
集成其他 Jetpack 库
您可以在开箱即用的情况下使用喜欢的 Jetpack 库。到目前为止,我们为 ViewModel、WorkManager、Navigation 和 Compose 提供直接注入支持。
参阅 文档,了解更多关于 Jetpack 的支持。
我非常感激 Hilt 与 ViewModel 一起开箱即用的使用方式,以及它消除单纯使用 Dagger 时必须设置的 ViewModel.Factory 模板代码的方式。
——Tinder 资深软件开发工程师 Marcelo Hernandez
Hilt 学习资源
Hilt 是 Jetpack 推荐的 Android 应用 DI 解决方案。想要了解更多并开始在您的应用中使用,请参阅如下资源:
-
Codelabs 中逐步学习 Hilt 教程:
-
代码示例:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
SuperEdge 云边隧道新特性:从云端SSH运维边缘节点
背景 在边缘集群的场景下边缘节点分布在不同的区域,且边缘节点和云端之间是单向网络,边缘节点可以访问云端节点,云端节点无法直接访问边缘节点,给边缘节点的运维带来很大不便,如果可以从云端SSH登录到边缘节点可以简化节点的运维工作。针对这一需求,SuperEdge 项目扩展了 tunnel 组件的能力,新增了 SSH 模块,让用户可以从云端 SSH 登录到边缘节点。 需求分析 边缘集群的节点分布在不同的区域,边缘节点能够访问云端 master 节点,但 master 节点无法访问边端区域内的节点,用户希望通过访问 master 节点的端口 SSH 登录到节点实施运维工作。 常规方案 使用 SSH 端口转发技术可以实现 SSH 运维边缘节点功能,具体内容如下图所示: 边缘节点 node-A 和 node-B 通过 SSH 的远程转发(ssh -R)将云端 master-A 节点的 port-A 和 port-B 端口与本地22端口(SSH Server 的端口)绑定 user 通过SSH的动态转发(ssh -D)与 master-A 建立 SSH 隧道同时在本地监听 local-port 端口...
-
下一篇
AMH 6.1 发布,10 周年升级版
AMH6.1发布 AMH-6.1为6.0的完善升级的重要版本,也是AMH10周年纪念版本。 AMH面板软件创建于2011年至今已经10周年,10年间我们保持每年持续开发更新完善产品, 保持软件零故障率稳定运行与不间断提供技术服务。 这么多年已过去,感谢一直支持与使用AMH的朋友们,谢谢,AMH将来会用心做的更好。 2021过往从此也归零,AMH-6.1我们重新再出发,今后我们将会提供更好的产品与服务, 一年为小计,十年之大计,今天我们约定再走完下一个10年,2031年不见不散。 AMH6.1版本介绍 AMH6.1新版本升级优化更新有30余项、主要更新如下: 1、更全的兼容性:全面兼容Aarch64/ARM64、x86/x86_64架构、ARM并支持极速方式安装AMH、兼容所有PHP版本(5.2~8.0)、MySQL版本(5.1~8.0)使用,与兼容优化手机端使用。 2、更好的使用体验:优化软件组分页排版、与更新支持批量升级软件、支持列队安装或卸载软件(可随时查看软件安装进度),与多方面优化减少操作流程等。 3、更快的响应速度:AMH除了源码文件下载支持多节点外,新版本软件模块与脚本也...
相关文章
文章评论
共有0条评论来说两句吧...