当前位置: 首页 > news >正文

Android hilt使用

  • 一,添加依赖库

添加依赖库app build.gradle.kts

    implementation("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-compiler:2.49")

添加插件app build.gradle.kts

plugins {id("dagger.hit.android.plugin")
}

添加插件项目中 build.gradle.kts

plugins {id("com.google.dagger.hilt.android") version "2.49" apply false
}
  • 二,基本用法

1,自动生成对应组件,需要自定义application

//生成相应组件,Hilt会自动生成所需要的组件
@HiltAndroidApp
public class HiltApplication extends Application {
}
public class User {//构造器注入创建@Injectpublic User() {Log.e("User", "new User()");}
}

2,注入调用

//Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
@AndroidEntryPoint
public class MainActivity extends ComponentActivity {//需要注入的实例化类@InjectUser user;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e("MainActivity", "new onCreate");}
}

打印如下

从打印中可以发现,Hilt的注入对象是我们打印位置之前的

  • 三,@Module注入,局部单利

改造代码如下

public class User {public User() {Log.e("User", "new User()");}
}
//将module加入对应作用域的容器,这里是ActivityComponent,作用域是 @ActivityScoped
@InstallIn(ActivityComponent.class)
@Module
public class UserMOdule {//添加activity的作用域 @ActivityScoped后,该类的在activity为单利@ActivityScoped@ProvidesUser provideUser() {return new User();}
}
//Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
@AndroidEntryPoint
public class MainActivity extends ComponentActivity {//需要注入的实例化类@InjectUser user;@InjectUser user1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e("MainActivity", "new onCreate");}
}

代码打印如下

这里进行了多次注入User对象,实际上User的构造器之调用了一次,表明之创建了一次,所以这几个对象都指向这个创建的对象,所以在该类中为单利

  • 四,@Module注入,全局单利

修改代码如下

1,module

//SingletonComponent全局单利容器,其余的容器都是这个容器的子容器
@InstallIn(SingletonComponent.class)
@Module
public class UserMOdule {//添加单利全局单利作用域,该方法只会被调用一次@Singleton@ProvidesUser provideUser() {return new User();}
}

 2,调用

//Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
@AndroidEntryPoint
public class MainActivity extends ComponentActivity {//需要注入的实例化类@InjectUser user;@InjectUser user1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e("MainActivity", "MainActivity new onCreate");startActivity(new Intent(this,MainActivity2.class));}
}
@AndroidEntryPoint
public class MainActivity2 extends AppCompatActivity {@InjectUser user;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);Log.e("MainActivity", "MainActivity2 new onCreate");}
}

调用打印

这里User创建了一次,和前面所讲对应

  • 五,Context类的注入

修改代码

public class User {public User(Context context) {Log.e("User", "new User() context " + context);}
}

 


//SingletonComponent全局单利容器,其余的容器都是这个容器的子容器
@InstallIn(SingletonComponent.class)
@Module
public class UserMOdule {//添加单利全局单利作用域,该方法只会被调用一次@Singleton@ProvidesUser provideUser(@ApplicationContext Context context) {return new User(context);}
}

 打印如下

 这样就传入了Application的context了

参考

Android之Dagger&Hilt依赖注入使用指南-CSDN博客

一看就会 Android中Hilt的各场景使用_android hilt-CSDN博客

http://www.lryc.cn/news/262125.html

相关文章:

  • 2023/12/17 初始化
  • 【算法Hot100系列】三数之和
  • CSS 简介
  • myBatis-plus自动填充插件
  • 746. 使用最小花费爬楼梯 --力扣 --JAVA
  • 使用Verdaccio搭建私有npm仓库
  • 87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验
  • Golang 数组 移除元素 双指针法 leetcode27 小记
  • c# OpenCV 图像裁剪、调整大小、旋转、透视(三)
  • Kafka相关知识
  • gitlab 通过svn hook 触发
  • 设计模式详解---单例模式
  • 毕设之-Hlang后端架构-双系统交互
  • 什么同源策略?
  • 破译模式:模式识别在计算机视觉中的作用
  • c语言-全局变量与局部变量
  • 【Spring】00 入门指南
  • BIM 技术:CIM (City Information Modeling) 1-7 级
  • c++ websocket 协议分析与实现
  • kali虚拟机无网络
  • Unity2023.3(Unity6)版本开始将可以发布WebGPU
  • 计算机网络期末考试A卷及答案
  • <蓝桥杯软件赛>零基础备赛20周--第10周--二分
  • C++友元类,工厂模式和继承的融合案例
  • 使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值
  • Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
  • Python Django Suit:构建现代化的Django后台管理
  • 电子学会C/C++编程等级考试2021年09月(六级)真题解析
  • SpringBoot 源码解析
  • dockerfile---创建镜像