最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Hilt 入門使用實(shí)戰(zhàn)

 更新時(shí)間:2025年11月13日 14:39:20   作者:stevenzqzq  
文章詳細(xì)講解了Hilt的基本使用,包括添加依賴、初始化、在Activity/Fragment和ViewModel中使用Hilt,以及創(chuàng)建Hilt模塊和管理作用域,通過(guò)一個(gè)實(shí)戰(zhàn)示例,展示了如何使用Hilt進(jìn)行依賴注入,感興趣的朋友跟隨小編一起看看吧

一 Android Hilt 入門教程實(shí)戰(zhàn)

Hilt 是 Android 官方推薦的 依賴注入框架,它基于 Dagger,簡(jiǎn)化了依賴管理,適用于 MVVM 架構(gòu),提高了代碼的可維護(hù)性。

1?? 為什么要用 Hilt?

在 Android 開(kāi)發(fā)中,們通常需要手動(dòng)創(chuàng)建和管理對(duì)象,例如 ViewModelRepository、Retrofit 等。Hilt 可以自動(dòng)管理這些對(duì)象的創(chuàng)建和生命周期,讓們專注于業(yè)務(wù)邏輯,而不是手動(dòng)實(shí)例化對(duì)象。

? Hilt 的優(yōu)點(diǎn):
?? 自動(dòng)管理依賴,避免手動(dòng)創(chuàng)建實(shí)例
?? ViewModel 支持,與 Jetpack 組件無(wú)縫集成
?? 作用域管理,不同組件(Activity、Fragment)能獲得合適的對(duì)象
?? 簡(jiǎn)化 Dagger 依賴注入,代碼更簡(jiǎn)潔

2?? Hilt 的基本使用

??(1)添加 Hilt 依賴

與第一點(diǎn)相同

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("kotlin-kapt")
    id("com.google.dagger.hilt.android")
}
android {
    namespace 'com.test.hiltstudy'
    compileSdk 35
    defaultConfig {
        applicationId "com.test.hiltstudy"
        minSdk 24
        targetSdk 35
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
//// Allow references to generated code
//kapt {
//    correctErrorTypes true
//}
dependencies {
    implementation libs.androidx.core.ktx
    implementation libs.androidx.appcompat
    implementation libs.material
    implementation libs.androidx.activity
    implementation libs.androidx.constraintlayout
    testImplementation libs.junit
    androidTestImplementation libs.androidx.junit
    androidTestImplementation libs.androidx.espresso.core
    // Hilt Dependencies
    implementation("com.google.dagger:hilt-android:2.51.1")
    kapt("com.google.dagger:hilt-android-compiler:2.51.1")
    // Fragment KTX for viewModels() delegate
    implementation("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")
//retrofit
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}

??(2)初始化 Hilt

AndroidManifest.xml

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

然后創(chuàng)建 MyApplication.kt

@HiltAndroidApp
class MyApplication : Application()

?? @HiltAndroidApp 用于初始化 Hilt,它會(huì)在 App 啟動(dòng)時(shí)配置依賴注入。

??(3)在 Activity/Fragment 使用 Hilt

在 Activity 里啟用 Hilt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject
    lateinit var someClass: SomeClass  // 自動(dòng)注入
}

?? @AndroidEntryPoint 標(biāo)記 Activity 以支持 Hilt
?? @Inject lateinit var someClass: SomeClass 直接注入對(duì)象

在 Fragment 里啟用 Hilt
@AndroidEntryPoint
class MainFragment : Fragment() {
    @Inject
    lateinit var someRepository: SomeRepository
}

?? Activity 和 Fragment 都必須加 @AndroidEntryPoint 才能使用 Hilt 注入的對(duì)象!

??(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 自動(dòng)創(chuàng)建 MainViewModel,不用 ViewModelProvider 手動(dòng)實(shí)例化。

??(5)創(chuàng)建 Hilt 模塊(Module)

如果 SomeRepository 不能用 @Inject 直接構(gòu)造,比如 Retrofit,們需要 使用 Module 提供實(shí)例

@Module
@InstallIn(SingletonComponent::class) // 作用于整個(gè)應(yīng)用生命周期
object AppModule {
    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService {
        return retrofit.create(ApiService::class.java)
    }
}

?? @Module 標(biāo)記為 Hilt 模塊
?? @Provides 提供依賴
?? @Singleton 表示單例

3?? Hilt 作用域

作用域說(shuō)明示例
@Singleton全局單例,應(yīng)用級(jí)共享Retrofit、數(shù)據(jù)庫(kù)
@ActivityScoped只在 Activity 里共享共享 ViewModel
@ViewModelScoped只在 ViewModel 里共享Repository

4?? Hilt 實(shí)戰(zhàn)示例

1?? 創(chuàng)建一個(gè) 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 里獲取數(shù)據(jù)

@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()
    }
}

? 運(yùn)行后,TextView 顯示 "Hello from Repository" ??

5?? 總結(jié)

?? @HiltAndroidApp 讓應(yīng)用支持 Hilt
?? @AndroidEntryPoint 用于 Activity/Fragment
?? @HiltViewModel 用于 ViewModel
?? @Inject 直接注入類實(shí)例
?? @Module + @Provides 提供無(wú)法直接注入的對(duì)象(如 Retrofit)
?? @Singleton、@ActivityScoped 控制對(duì)象生命周期

Hilt 讓 依賴注入變得簡(jiǎn)單高效,可以自動(dòng)管理對(duì)象,提升代碼的可維護(hù)性。

參考

google Hilt 教程

到此這篇關(guān)于Android Hilt 入門教程_實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Android Hilt 入門內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

吉隆县| 峨眉山市| 赤壁市| 平果县| 大兴区| 广德县| 定结县| 冕宁县| 阳信县| 新宁县| 呼玛县| 游戏| 金秀| 永德县| 大余县| 新乡市| 禹城市| 松潘县| 曲松县| 博罗县| 呼玛县| 平塘县| 龙井市| 拜泉县| 双桥区| 莎车县| 于都县| 秦安县| 吴桥县| 亳州市| 岱山县| 普兰店市| 金秀| 红桥区| 鄂尔多斯市| 张掖市| 金湖县| 凤台县| 西乌珠穆沁旗| 攀枝花市| 阿拉尔市|