安卓依赖注入(DI)框架Hilt-Dagger入门

0. Why?

  • 为什么需要依赖注入?

答:解耦。

  • 解谁和谁的耦?

解对象创建与对象使用的耦。

  • 如何理解?

此处引出两个概念:IoC容器、DI依赖注入,我们将对象的创建过程、销毁过程交给IoC容器(称为控制反转),在需要使用对象时由容器提供(称为注入),从而减少复杂系统的代码耦合,提高编程效率。

如果大家接触过Spring Boot,就能很轻松的理解,Spring的核心就是IoC容器,及其对Bean(对象)生命周期的管理。

  • Hilt和Dagger的关系?

Hilt是对Dagger的场景化,在Android场景下的封装与使用,因此在引入依赖时需要同时引入Dagger库和Hilt库,并且不可避免的要接触到很多Dagger知识

1. How?

  1. 引入依赖
// 文件名: build.gradle (根目录)
buildscript {...dependencies {...classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'}
}
// 文件名: build.gradle (:app)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
...dependencies {...implementation "com.google.dagger:hilt-android:2.28-alpha"kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'
}
  1. 在Application类上加上@HiltAndroidApp注解(必需, 如果没有自定义Application类,则需要创建一个,并在AndroidManifest文件中声明),作为Dagger容器依附的生命周期的边界。
@HiltAndroidApp
public class App extends Application {@Overridepublic void onCreate() {...}
}
  1. 我们以RecyclerAdapter对象为例,说明对象的创建过程
class PictureAdapter @Inject constructor() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { .. }override fun getItemCount(): Int { ... }
}

可以看到,对于无参数构造的对象,只需要在构造函数前加上@Inject即可。

  1. 对象的使用
@AndroidEntryPoint
class HomeActivity : AppCompatActivity() {// 只需要在声明对象的地方加上@Inject lateinit即可在后面直接使用,对象的创建、赋值操作交由Hilt处理@Injectlateinit var pictureAdapter: PictureAdapteroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)...// 直接赋给RecyclerView的adapterpictureRecyclerView.setAdapter(pictureAdapter)}
}

可以看到,对于Activity类,只需要在类上加上@AndroidEntryPoint注解,然后在需要注入的变量上加上@Inject lateinit即可。

本文只对Hilt的大致原理与使用作简要说明,具体可前往https://developer.android.com/training/dependency-injection/hilt-android,原创文章,禁止转载。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部