当前位置:   article > 正文

Android hilt使用_build.gradle.kts添加hilt

build.gradle.kts添加hilt

一,添加依赖库

添加依赖库app build.gradle.kts

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

添加插件app build.gradle.kts

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

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

  1. plugins {
  2. id("com.google.dagger.hilt.android") version "2.49" apply false
  3. }

二,基本用法

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

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

2,注入调用

  1. //Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
  2. @AndroidEntryPoint
  3. public class MainActivity extends ComponentActivity {
  4. //需要注入的实例化类
  5. @Inject
  6. User user;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. Log.e("MainActivity", "new onCreate");
  12. }
  13. }

打印如下

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

三,@Module注入,局部单利

改造代码如下

  1. public class User {
  2. public User() {
  3. Log.e("User", "new User()");
  4. }
  5. }
  1. //将module加入对应作用域的容器,这里是ActivityComponent,作用域是 @ActivityScoped
  2. @InstallIn(ActivityComponent.class)
  3. @Module
  4. public class UserMOdule {
  5. //添加activity的作用域 @ActivityScoped后,该类的在activity为单利
  6. @ActivityScoped
  7. @Provides
  8. User provideUser() {
  9. return new User();
  10. }
  11. }
  1. //Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
  2. @AndroidEntryPoint
  3. public class MainActivity extends ComponentActivity {
  4. //需要注入的实例化类
  5. @Inject
  6. User user;
  7. @Inject
  8. User user1;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. Log.e("MainActivity", "new onCreate");
  14. }
  15. }

代码打印如下

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

四,@Module注入,全局单利

修改代码如下

1,module

  1. //SingletonComponent全局单利容器,其余的容器都是这个容器的子容器
  2. @InstallIn(SingletonComponent.class)
  3. @Module
  4. public class UserMOdule {
  5. //添加单利全局单利作用域,该方法只会被调用一次
  6. @Singleton
  7. @Provides
  8. User provideUser() {
  9. return new User();
  10. }
  11. }

 2,调用

  1. //Hilt会自动创建注入方法,然后通过注入方法注入对象,必须是ComponentActivity或者ComponentActivity的子类
  2. @AndroidEntryPoint
  3. public class MainActivity extends ComponentActivity {
  4. //需要注入的实例化类
  5. @Inject
  6. User user;
  7. @Inject
  8. User user1;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. Log.e("MainActivity", "MainActivity new onCreate");
  14. startActivity(new Intent(this,MainActivity2.class));
  15. }
  16. }
  1. @AndroidEntryPoint
  2. public class MainActivity2 extends AppCompatActivity {
  3. @Inject
  4. User user;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main3);
  9. Log.e("MainActivity", "MainActivity2 new onCreate");
  10. }
  11. }

调用打印

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

五,Context类的注入

修改代码

  1. public class User {
  2. public User(Context context) {
  3. Log.e("User", "new User() context " + context);
  4. }
  5. }

  1. //SingletonComponent全局单利容器,其余的容器都是这个容器的子容器
  2. @InstallIn(SingletonComponent.class)
  3. @Module
  4. public class UserMOdule {
  5. //添加单利全局单利作用域,该方法只会被调用一次
  6. @Singleton
  7. @Provides
  8. User provideUser(@ApplicationContext Context context) {
  9. return new User(context);
  10. }
  11. }

 打印如下

 这样就传入了Application的context了

参考

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/503684
推荐阅读
相关标签
  

闽ICP备14008679号