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

Android Hilt 入门教程_实战

一 Android Hilt 入门教程实战

Hilt 是 Android 官方推荐的 依赖注入框架,它基于 Dagger,简化了依赖管理,适用于 MVVM 架构,提高了代码的可维护性。


1️⃣ 为什么要用 Hilt?

在 Android 开发中,们通常需要手动创建和管理对象,例如 ViewModelRepositoryRetrofit 等。Hilt 可以自动管理这些对象的创建和生命周期,让们专注于业务逻辑,而不是手动实例化对象。

Hilt 的优点:
✔️ 自动管理依赖,避免手动创建实例
✔️ ViewModel 支持,与 Jetpack 组件无缝集成
✔️ 作用域管理,不同组件(Activity、Fragment)能获得合适的对象
✔️ 简化 Dagger 依赖注入,代码更简洁


2️⃣ Hilt 的基本使用

📌(1)添加 Hilt 依赖

与第一点相同

plugins {id("com.android.application")id("kotlin-android")id("kotlin-kapt")id("com.google.dagger.hilt.android")
}android {namespace 'com.test.hiltstudy'compileSdk 35defaultConfig {applicationId "com.test.hiltstudy"minSdk 24targetSdk 35versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}
}//// Allow references to generated code
//kapt {
//    correctErrorTypes true
//}dependencies {implementation libs.androidx.core.ktximplementation libs.androidx.appcompatimplementation libs.materialimplementation libs.androidx.activityimplementation libs.androidx.constraintlayouttestImplementation libs.junitandroidTestImplementation libs.androidx.junitandroidTestImplementation libs.androidx.espresso.core// Hilt Dependenciesimplementation("com.google.dagger:hilt-android:2.51.1")kapt("com.google.dagger:hilt-android-compiler:2.51.1")// Fragment KTX for viewModels() delegateimplementation("androidx.fragment:fragment-ktx:1.6.2")// ViewModel
//    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
//    implementation("androidx.activity:activity-ktx:1.8.1")
//retrofitimplementation("com.squareup.retrofit2:converter-gson:2.9.0")}

📌(2)初始化 Hilt

AndroidManifest.xml

<applicationandroid:name=".MyApplication"...>
</application>

然后创建 MyApplication.kt

@HiltAndroidApp
class MyApplication : Application()

🔹 @HiltAndroidApp 用于初始化 Hilt,它会在 App 启动时配置依赖注入。


📌(3)在 Activity/Fragment 使用 Hilt

在 Activity 里启用 Hilt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {@Injectlateinit var someClass: SomeClass  // 自动注入
}

🔹 @AndroidEntryPoint 标记 Activity 以支持 Hilt
🔹 @Inject lateinit var someClass: SomeClass 直接注入对象

在 Fragment 里启用 Hilt
@AndroidEntryPoint
class MainFragment : Fragment() {@Injectlateinit var someRepository: SomeRepository
}

💡 Activity 和 Fragment 都必须加 @AndroidEntryPoint 才能使用 Hilt 注入的对象!


📌(4)在 ViewModel 里使用 Hilt

@HiltViewModel
class MainViewModel @Inject constructor(private val repository: SomeRepository
) : ViewModel() {fun fetchData() = repository.getData()
}

ActivityFragment 里:

private val viewModel: MainViewModel by viewModels()

🔹 Hilt 自动创建 MainViewModel,不用 ViewModelProvider 手动实例化。


📌(5)创建 Hilt 模块(Module)

如果 SomeRepository 不能用 @Inject 直接构造,比如 Retrofit,们需要 使用 Module 提供实例

@Module
@InstallIn(SingletonComponent::class) // 作用于整个应用生命周期
object AppModule {@Provides@Singletonfun provideRetrofit(): Retrofit {return Retrofit.Builder().baseUrl("https://api.example.com/").addConverterFactory(GsonConverterFactory.create()).build()}@Provides@Singletonfun provideApiService(retrofit: Retrofit): ApiService {return retrofit.create(ApiService::class.java)}
}

🔹 @Module 标记为 Hilt 模块
🔹 @Provides 提供依赖
🔹 @Singleton 表示单例


3️⃣ Hilt 作用域

作用域说明示例
@Singleton全局单例,应用级共享Retrofit、数据库
@ActivityScoped只在 Activity 里共享共享 ViewModel
@ViewModelScoped只在 ViewModel 里共享Repository

4️⃣ Hilt 实战示例

1️⃣ 创建一个 Repository

class SomeRepository @Inject constructor() {fun getData(): String = "Hello from Repository"
}

2️⃣ 在 ViewModel 里注入

@HiltViewModel
class MainViewModel @Inject constructor(private val repository: SomeRepository
) : ViewModel() {fun fetchData(): String = repository.getData()
}

3️⃣ 在 Activity 里获取数据

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {private val viewModel: MainViewModel by viewModels()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)findViewById<TextView>(R.id.textView).text = viewModel.fetchData()}
}

✅ 运行后,TextView 显示 "Hello from Repository" 🎉


5️⃣ 总结

🔹 @HiltAndroidApp 让应用支持 Hilt
🔹 @AndroidEntryPoint 用于 Activity/Fragment
🔹 @HiltViewModel 用于 ViewModel
🔹 @Inject 直接注入类实例
🔹 @Module + @Provides 提供无法直接注入的对象(如 Retrofit)
🔹 @Singleton@ActivityScoped 控制对象生命周期

Hilt 让 依赖注入变得简单高效,可以自动管理对象,提升代码的可维护性。

参考

google Hilt 教程

http://www.dtcms.com/a/586554.html

相关文章:

  • 兰州网站设计公司哪家最好网站建设客源开发
  • 无锡好的网站公司WordPress登录不进
  • C++ 枚举(enum)与联合体(union)全解析——从内存到底层机制全面掌握
  • 做网站国外网站网站搬迁
  • SAMSUNG三星MICRON美光SEAGATE希捷WD西数数据处理中心企业级SSD硬盘
  • 个人网站 前置审批福建省建设相关网站
  • 桶排序相关知识深入理解(计数排序,基数排序)
  • 医院门户网站建设规划时尚flash网站
  • 怎么做网站免费的刷赞漳州台商投资区建设局网站
  • 100m网站注册织梦 网站公告
  • 网站备案年限查询电子邮箱注册网站申请
  • 张家港网站推广优化wordpress能做交互类网站
  • 北京建站的中国建设部网站能查叉车证
  • php外贸网站制作淄博网站制作公司推广
  • 懂事务与数据库连接池
  • 几种限流算法介绍和使用场景
  • cesium126,230417,模型太亮白:
  • wordpress网站如何视觉设计网站有哪些
  • 灵璧做网站的公司百搜科技
  • 黑龙江省建设安全监督网站优化wordpress访问速度
  • 佛山网站建设怎么办黑龙江建设安全监督网查询
  • 网站后台这么做视频教程做网站风险分析
  • Photoshop合成的核心知识
  • 开发网站需要什么条件做网站首页文件
  • linux之Access,Modify,Change
  • Unicode全字符集加解密工具 - 命令行交互版:功能完整的终端解决方案
  • 昆明网站制作公司百度推广网站建设高端培训学校
  • 福田网站设计哪家好青海网站建设多少钱
  • 怎么在网站上做推广广州网站建设专家
  • 宽带和方向性无线信道