Android hint简单使用

一、Hilt核心概念快速理解

1. 什么是Hilt?

  • 基于Dagger的Android专属DI框架

  • Google官方推荐,简化了Dagger的配置

  • 自动生成大量模板代码

2. 核心注解(先掌握这几个关键的):

@HiltAndroidApp    // Application类上使用
@AndroidEntryPoint  // Activity/Fragment/View/Service等
@Inject             // 依赖注入
@Module             // 提供依赖的模块
@InstallIn          // 指定模块作用范围

二、紧急上手的实战步骤

步骤1:基础配置

在项目级 build.gradle

buildscript {
    dependencies {
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.48'
    }
}

在app模块的 build.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'com.google.dagger.hilt.android'
}

dependencies {
    implementation "com.google.dagger:hilt-android:2.48"
    kapt "com.google.dagger:hilt-compiler:2.48"
}

步骤2:初始化Hilt

创建/修改Application类:

@HiltAndroidApp
class MyApplication : Application()

AndroidManifest.xml中配置:

<application
    android:name=".MyApplication"
    ...>

步骤3:第一个依赖注入实例

场景:在Activity中注入一个Repository

  1. 定义要注入的类:

class UserRepository @Inject constructor() {
    fun getUsers() = listOf("User1", "User2")
}

     2.在Activity中注入:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    
    @Inject
    lateinit var userRepository: UserRepository
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 直接使用,无需手动初始化
        val users = userRepository.getUsers()
    }
}

三、项目实战模式

模式1:接口绑定(最常用)

// 定义接口
interface ApiService {
    fun fetchData()
}

// 实现类
class RealApiService @Inject constructor() : ApiService {
    override fun fetchData() { /* 实现 */ }
}

// 提供依赖的Module
@Module
@InstallIn(ActivityComponent::class)
object AppModule {
    
    @Provides
    fun provideApiService(service: RealApiService): ApiService = service
}

// 在Activity中使用
@AndroidEntryPoint
class MyActivity : AppCompatActivity() {
    @Inject
    lateinit var apiService: ApiService
}

模式2:带参数的依赖

class UserRepository @Inject constructor(
    private val apiService: ApiService,
    private val localData: LocalDataSource
) {
    // 自动注入两个依赖
}

模式3:ViewModel注入(重要!)

@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: UserRepository
) : ViewModel() {
    // ViewModel逻辑
}

// 在Activity/Fragment中获取
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by viewModels()
}

四、快速排查技巧

常见错误及解决:

  1. 编译错误:缺少依赖

> 确保使用了 kapt 而不是 annotationProcessor
> 确认所有 @Module 都有 @InstallIn

        2. 运行时:lateinit property未初始化

> 检查类是否添加了 @AndroidEntryPoint
> 父类也需要支持Hilt(Fragment->FragmentActivity)

      3. 作用域问题

// 单例应用级别
@Module
@InstallIn(SingletonComponent::class)
object AppModule

// Activity级别
@Module
@InstallIn(ActivityComponent::class)
object ActivityModule

五、项目中的最佳实践

分层结构建议:

com.example.app
├── di/
│   ├── AppModule.kt      # 全局单例
│   ├── NetworkModule.kt  # 网络相关
│   └── DatabaseModule.kt # 数据库相关
├── data/
│   ├── repositories/     # 仓库层
│   └── datasources/      # 数据源
└── presentation/
    ├── viewmodels/       # ViewModel
    └── ui/               # Activity/Fragment

实用代码片段:

// 1. 提供Retrofit实例
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
    
    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit = Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    
    @Provides
    fun provideApiService(retrofit: Retrofit): ApiService = 
        retrofit.create(ApiService::class.java)
}

六、学习资源推荐

  1. Hilt官方文档 https://developer.android.com/training/dependency-injection/hilt-android?hl=zh-cn
  2. Google Codelab实战                    https://developer.android.com/codelabs/android-hilt?hl=zh-cn#0

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值