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

在-Android-中通过-Hilt-进行依赖项注入

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

DI (依赖项注入) 是一种在程序设计中被宽泛应用的技术,非常适合 Android 开发,该技术能够将依赖项提供给类,从而让类不用本人创立这些依赖。通过遵循 DI 准则,您将为良好的利用架构、更高的代码复用性和便捷的测试奠定根底。您是否尝试过在利用中进行手动依赖项注入?即便应用了当今许多现有的依赖项注入库,随着您的我的项目越来越大,这些库仍须要大量模板代码,因为您必须手动结构每个类及其依赖项,并创立容器用来复用和治理依赖项。

通过遵循 DI 准则,您将为良好的利用架构、更高的代码复用性和便捷的测试奠定根底。

通过为我的项目中的每个 Android 类提供容器并主动治理其生命周期,新的 Hilt 库 定义了一种在利用中进行 DI 的规范形式。Hilt 目前处于 alpha 阶段,请在您的利用中进行尝试,并向咱们 提供反馈。

Hilt 在热门 DI 库 Dagger 的根底上构建而成,因此可能受害于 Dagger 的编译时正确性、运行时性能、可伸缩性和 Android Studio 反对。如需理解详情,请参阅《Dagger 导航从未如此简略 | Android Studio 4.1》。正因如此,在 Google Play 商店前 10k 的顶级利用中,其中 74% 都宽泛应用了 Dagger。然而,因为在编译期生成代码,构建工夫会有所增加。

因为许多 Android Framework 中的类都是由操作系统本身实例化的,因而在 Android 利用中应用 Dagger 时,会存在与此相关的模板代码。不同于 Dagger,Hilt 集成了 Jetpack 库以及 Android Framework 中的类,并移除了大部分模板代码,使您能够专一于定义和注入绑定中的重要环节,而无需放心治理 Dagger 的配置和关联。Hilt 能够主动生成并提供如下内容:

  • 用于集成 Android Framework 类与 Dagger 的组件,防止了手动创立
  • Hilt 主动生成组件的作用域注解
  • 预约义的绑定以及限定符

最重要的是,因为 Dagger 和 Hilt 能够共存,您能够依据须要迁徙利用。

Hilt 实战

为了向您展现 Hilt 的易用性,咱们将通过一个典型的 Android 利用来演示一些疾速 DI。让咱们应用 Hilt 将 AnalyticsAdapter 注入到 MainActivity 中。

首先,在您的 Application 类上增加 @HiltAndroidApp 注解,从而使您的利用开启 Hilt,触发 Hilt 的代码生成:

<code class="Kotlin">@HiltAndroidApp
class MyApplication : Application() { ... }

其次,通过应用 @Inject 注解润饰 AnalyticsAdapter 的构造函数,注明 Hilt 如何提供其实例:

<code class="Kotlin">class AnalyticsAdapter @Inject constructor() { ... }

第三,为了将 AnalyticsAdapter 实例注入到 MainActivity 中,须要为 Activity 增加 @AndroidEntryPoint 注解以启用 Hilt,并通过 @Inject 注解修饰字段执行注入:

<code class="Kotlin">@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
  @Inject lateinit var analytics: AnalyticsAdapter
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // analytics 实例曾经通过 Hilt 赋值,并且能够应用
  }
}

更多信息,请在文末备忘单中轻松查看新注解的性能。

对 Jetpack 的反对

您能够通过 Hilt 轻松应用您喜爱的 Jetpack 库。在此版本中,咱们反对 ViewModel 和 WorkManager 间接注入。

举个例子,向 LoginActivity 中注入一个 组件架构 ViewMode —— LoginViewModelm: 给 LoginViewModel 减少 @ViewModelInject 注解,而后就能够如您所愿在 Activity 或 Fragment 中应用。

<code class="Kotlin">class LoginViewModel @ViewModelInject constructor(
  private val analyticsAdapter: AnalyticsAdapter
): ViewModel { ... }
@AndroidEntryPoint
class LoginActivity : AppCompatActivity() {
  private val loginViewModel: LoginViewModel by viewModels()
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // loginViewModel 曾经能够被应用
  }
}

理解无关 Jetpack 反对的更多信息,请查阅: Android 官网文档|Hilt 和 Jetpack 集成

开始应用 Hilt

如果您曾经对 Hilt 感兴趣,并心愿理解更多信息,咱们整顿了如下指南帮您理解如何 将 Hilt 增加到您的 Android 利用

文档

如果您对 DI 或 Dagger 还有些生疏,请查看下面的指南,将 Hilt 增加到 Android 利用。如果您曾经理解 Dagger,请查看 dagger.dev/hilt 内提供的文档。如果您仅想理解新注解以及能够通过 Hilt 做什么,请您查看并珍藏文末的备忘单。

面向 Dagger 使用者

如果您曾经在利用中应用 Dagger 或者 dagger.android,查看 迁徙指南 或者下文提及的 Codelab 能够帮忙您切换到 Hilt。因为 Dagger 和 Hilt 能够共存,您能够逐渐迁徙您的利用。

Codelab

咱们公布了如下两个 Codelab,手把手教您应用 Hilt:

  • 在 Android 利用中应用 Hilt
  • 将 Dagger 利用迁徙到 Hilt

示例代码

您是否想在现存利用中查看如何应用 Hilt?请查阅以下资源:

  • GitHub | Google I/O 2020 利用
  • GitHub | Android architecture-samples 仓库的 dev-hilt 分支

反馈

Hilt 目前处于 1.0.0-beta01 版本,如果您在应用中呈现任何问题,请及时向咱们 反馈问题。

备忘单

该 备忘单 能够让您疾速查看 Hilt 和 Dagger 注解的性能差别以及如何应用它们。


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

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

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

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

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