[学习]Hilt的使用(一)

这里主要是看了扔物线的视频做的记录,我觉得讲得很好:朱凯《Hilt:Google 的依赖注入库终于达到了小白可用的级别》
官网教程:Hilt 应用类

网上很多教程,但是由于我是初学者,原本 android 开发也很一般,大部分都是看得我云里雾里。其实我很想知道在不使用这个的情况,和使用这个的情况。但是又想想,这是一个循序渐进的过程,生在这个时代是幸运的,别人都帮我们封装好了,上手就比较容易了,就像前端开发,也没使用原生 js 开发就进入了框架时代,一工作就是使用各种框架,虽然不是玩得很六,但是至少大部分都是可以自行完成的。所以想通了,立足于当下,先使用好当前的,慢慢的深入,不着急。

1. 项目引入

在项目下的 build.gradle > buildscript > dependencies 下:

classpath 'com.google.dagger:hilt-android-gradle-plugin:2.31.2-alpha'

app 下的 build.gradle 中添加:

plugins {
  ...
  id 'dagger.hilt.android.plugin'
  id 'kotlin-android-extensions'
  ...
}
...
dependencies {
  ...
  implementation "com.google.dagger:hilt-android:2.31.2-alpha"
  kapt "com.google.dagger:hilt-android-compiler:2.31.2-alpha"
  ...
}

2. 准备工作

现在新建的项目我发现默认没有 Application 文件了。首先新建一个继承 Application 的类:

@HiltAndroidApp
class App: Application()

然后在 AndroidManifest.xml 文件中:


...

新建一个类 User ,我这里是用这个练习:

data class User (val name: String, val age: Int) {
    @Inject constructor(): this("吴敬悦", 27)
}

3. 设置展示的视图

打开 activity_main.xml 文件,并修改文件,我就使用 TextView 显示上面的信息:


使用插件让编辑器帮我们自动创建视图 id 对应的变量,打开 app>build.gradle

plugins {
  ...
  id 'kotlin-android-extensions'
}

这样就可以直接在 Activity 中直接获取了。

text.text = "姓名:${user.name},年龄:${user.age}"

4. 在 Activity 中注入

package com.example.hiltapplication

import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.android.synthetic.main.activity_main.*
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject
    lateinit var user: User

    @SuppressLint("SetTextI18n")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        text.text = "姓名:${user.name},年龄:${user.age}"
    }
}

5. 效果

最终简单的效果

6. 谈我的理解

这个感觉的确挺好的,我都不会实例化对象了,但是我写的这个很简单,其实还没有不写简单,只是不用实例化了,我想如果实例化的地方多了就真的方便了。当然 Hilt 还有共享的功能,如果标注为共享了,那么就相当于单例模式了,这样在一处修改,另外使用到的地方也修改了。

@Inject 代表关联实例化了,去哪里关联呢,就在 User 中的 @Inject 关联,android studio 中提供的有找到对应地方的方法,只不过需要你是高版本,具体什么版本我不知道,我的是 4.1 可以:

没错就是这里

同样的在 User 哪里也可以看到有多少注入了它自身。
这里也可以

至于 @AndroidEntryPoint 我理解为,告诉编译器,这里需要特别处理。 @HiltAndroidApp 呢,我猜是跟上面一样,之所以要这样,我估计跟编译过程有关系,现在我还不懂,只能靠猜,所以只能跟着官网写,等使用一段时间以后才深究。 @ActivityScoped 就是跟共享相关了。

你可能感兴趣的:([学习]Hilt的使用(一))