美文网首页Android
Android Hilt使用

Android Hilt使用

作者: 翟小乙 | 来源:发表于2023-02-20 16:05 被阅读0次

前言

Hilt 是基于Dagger封装衍生而来,使用起来更加简单,基于上一章Dagger讲解的快递和快递员,Hilt其实就是相当于Dagger2的快递员,以下我们是基于Hilt插件 2.28来讲解,最新的可以看官网最新版

上一篇-Android Dagger2使用
一. 引用Hilt
  1. 项目的build.gradle 中引入插件
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.41'
  1. App的build.gradle 中引入插件
dependencies {
    // hilt 的功能支持
    implementation 'com.google.dagger:hilt-android:2.28-alpha'
    // hilt 自己的注解处理器
    annotationProcessor 'com.google.dagger:hilt-android-compiler:2.28-alpha'
}
  1. App的build.gradle 中应用插件
plugins {
    id 'dagger.hilt.android.plugin'
}
二.使用Hilt
  1. 自定义Application增加注解 @HiltAndroidApp
@HiltAndroidApp
public class MyApplication extends Application {

}
  1. 创建实体类(快递)
// 正常业务的一个对象
public class UerInfo {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建包裹-->并分发快递

注解 @InstallIn 是告诉用户应用于哪些组件,而应用于哪些组件对应的会有生命周期范围如:ApplicationComponent.class)对应注解@Singleton 存在于应用生命周期。

@InstallIn(ApplicationComponent.class)
@Module
public class UerInfoModle {
    @Provides
    @Singleton
    public UerInfo uerInfoInit(){
        return  new UerInfo();
    }
}
  1. 使用接收快递

注解 @AndroidEntryPoint 是谁接收就增加注解

  • 测试uerInfo1和uerInfo2 地址相同,如果在跳转页面或者在其他类接收也一样。
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
    @Inject
    UerInfo uerInfo1;
    @Inject
    UerInfo uerInfo2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        TextView textView = findViewById(R.id.txtView);
        String msg  = "全局-----"+uerInfo1.hashCode()+"----"+uerInfo2.hashCode();
        
    }
}
三.目标组件和组件作用域
  1. 目标组件

例如:如果在Activity中使用就需要使用注解@ActivityComponent

使用目标组件.png
  1. 组件作用域

如果在Activity中使用就需要使用注解@ActivityComponent,若在Activity内则单例则使用注解@ActivityScoped

1676964687418.png
四. Hilt 的@Binds注解

以 AnalyticsService 为例。如果 AnalyticsService 是一个接口,则您无法通过构造函数注入它,而应向 Hilt 提供绑定信息,方法是在 Hilt 模块内创建一个带有 @Binds 注解的抽象函数。@Binds 注解会告知 Hilt 在需要提供接口的实例时要使用哪种实现。

带有注解的函数会向 Hilt 提供以下信息:

  • 函数返回类型会告知 Hilt 该函数提供哪个接口的实例。
  • 函数参数会告知 Hilt 要提供哪种实现。

接口

public interface AnalyticsService {
  void analyticsMethods();
}

AnalyticsServiceImpl的实例

//构造函数被注入,因为Hilt需要知道如何
//提供AnalyticsServiceImpl的实例
public class AnalyticsServiceImpl implements AnalyticsService {
  ...
  @Inject
  AnalyticsServiceImpl(...) {
    ...
  }
}

注入实例

@Module
@InstallIn(ActivityComponent.class)
public abstract class AnalyticsModule {

  @Binds
  public abstract AnalyticsService bindAnalyticsService(
    AnalyticsServiceImpl analyticsServiceImpl
  );
}

相关文章

  • Hilt依赖注入

    1.使用 Hilt 实现依赖项注入 | Android 开发者 | Android Developers ...

  • Jetpack - Hilt

    Jetpack - Hilt依赖注入、依赖注入框架Android 常用的依赖注入框架Hilt 的简单使用 1. 依...

  • Android Hilt使用

    https://developer.android.google.cn/training/dependency-i...

  • Android Hilt

    Android Hilt使用教程(包含实例)[https://www.jianshu.com/p/f32beb36...

  • Android官方新推的DI库 Hilt

    Android官方新推的DI库 Hilt Hilt是Google Android官方新推荐的依赖注入工具.已加入到...

  • android hilt 坑位

    之前和现在使用 之前 现在 用到了 这样直接写 就会找不到 dagger.hilt.android.plugin ...

  • android Jetpack-Hilt基础入门

    相关资料 https://developer.android.com/codelabs/android-hilt?...

  • Android Weekly Notes #420

    Android Weekly Issue #420 Exploring Hilt: Application Lev...

  • 2022年安卓发展趋势

    Jetpack Compose、Hilt、Kotlin Flow 和 Coroutines——Android 开发...

  • jetpack Hilt学习

    Hilt是什么? Hilt Google开源的一个 Android 的依赖注入库,其实是基于 Dagger。Hil...

网友评论

    本文标题:Android Hilt使用

    本文链接:https://www.haomeiwen.com/subject/vzrgkdtx.html