• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Hilt-稳定版发布-更便捷的-Android-依赖项注入

android 搞代码 3年前 (2022-03-01) 9次浏览 已收录 0个评论

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 库。到目前为止,咱们为 ViewModelWorkManagerNavigationCompose 提供间接注入反对。

参阅 文档,理解更多对于 Jetpack 的反对。

我非常感激 Hilt 与 ViewModel 一起开箱即用的应用形式,以及它打消单纯应用 Dagger 时必须设置的 ViewModel.Factory 模板代码的形式。

——Tinder 资深软件开发工程师 Marcelo Hernandez

Hilt 学习资源

Hilt 是 Jetpack 举荐的 Android 利用 DI 解决方案。想要理解更多并开始在您的利用中应用,请参阅如下资源:

  • 理解应用依赖项注入的收益
  • 理解如何在您的利用中应用 Hilt
  • 从 Dagger 到 Hilt 的迁徙指南
  • Codelabs 中逐渐学习 Hilt 教程:

    • 在 Android 利用中应用 Hilt
    • 将 Dagger 利用迁徙到 Hilt
  • 代码示例:

    • Google I/O 2020 利用
    • Sunflower 利用
  • Hilt 及 Dagger 注解的区别及应用形式的备忘录

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Hilt-稳定版发布-更便捷的-Android-依赖项注入

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址