android jetpack的使用

Jetpack 新成员 Hilt

https://juejin.cn/post/6844904198803292173
引用HiDhl的Hilt

1.作用:依赖注入

2.为什么要使用依赖注入

  • 依赖注入库会自动释放不再使用的对象,减少资源的过度使用。

  • 在配置 scopes 范围内,可重用依赖项和创建的实例,提高代码的可重用性,减少了很多模板代码。

  • 代码变得更具可读性。

  • 易于构建对象。

  • 编写低耦合代码,更容易测试。

3.依赖注入常用的注解

  • @HiltAndroidApp
    1.所有使用 Hilt 的 App 必须包含一个使用 @HiltAndroidApp 注解的 Application。
    2.@HiltAndroidApp 注解将会触发 Hilt 代码的生成,作为应用程序依赖项容器的基类。

  • @AndroidEntryPoint
    Hilt 提供的 @AndroidEntryPoint 注解用于提供 Android 类的依赖(Activity、Fragment、View、Service、BroadcastReceiver)特殊的 Application 使用 @HiltAndroidApp 注解。
    1.Activity:仅仅支持 ComponentActivity 的子类例如 FragmentActivity、AppCompatActivity 等等。
    2.Fragment:仅仅支持继承 androidx.Fragment 的 Fragment
    注:如果Fragment使用了@AndroidEntryPoint,那么包含他的antivity必须也要使用@AndroidEntryPoint。

  • @Inject
    Hilt 需要知道如何从相应的组件中提供必要依赖的实例。使用 @Inject 注解来告诉 Hilt 如何提供该类的实例,它常用于构造函数、非私有字段、方法中。

  • @Module
    常用于创建依赖类的对象(例如第三方库 OkHttp、Retrofit等等),使用 @Module 注解的类,需要使用 @InstallIn 注解指定 module 的范围。

  • @InstallIn
    使用 @Module 注入的类,需要使用 @InstallIn 注解指定 module 的范围,例如使用 @InstallIn(ActivityComponent::class) 注解的 module 会绑定到 activity 的生命周期上。
    在这里插入图片描述

  • @Provides
    它常用于被 @Module 注解标记类的内部的方法,并提供依赖项对象。

  • @EntryPoint

  • @Singleton
    提供单例

4.如何使用 Hilt

  1. 首先在 project 的 build.gradle 添加以下依赖。
buildscript {
    ...
    dependencies {
        ...
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
    }
}
  1. 然后在 App 模块中的 build.gradle 文件中添加以下代码。
...
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

android {
    ...
}

dependencies {
    implementation "com.google.dagger:hilt-android:2.28-alpha"
    kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
}
  1. Hilt 使用 Java 8 的功能,所以要在项目中启用 Java 8,需要在 App 模块的 build.gradle 文件中,添加以下代码
android {
  ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    // For Kotlin projects
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
  1. Application 是 App 的入口,所以所有使用 Hilt 的 App 必须包含一个使用 @HiltAndroidApp 注解的 Application
@HiltAndroidApp
class HiltApplication : Application() {
}

5.Hilt 如何和第三方组件一起使用

@Module
@InstallIn(ApplicationComponent::class)
object NetworkModule {
    @Provides
    @Singleton
    fun provideOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            .build()
    }

    @Provides
    @Singleton
    fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
        return Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl("192.168.55.12:8080/gtc")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    @Provides
    @Singleton
    fun provideGitHubService(retrofit: Retrofit): HttpService {
        return retrofit.create(HttpService ::class.java)
    }
}

6.Hilt 如何和 ViewModel 一起使用

  • 在 App 模块中的 build.gradle 文件中添加以下代码。
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
  • activity使用注解
class MainActivity : AppCompatActivity() {
	//by viewModels()需要添加库
	//implementation 'androidx.activity:activity-ktx:1.2.0-beta01'
    private val mHitViewModule: HiltViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mHitViewModule.mHitLiveData.observe(this, Observer {
            println("$it 飞起来吧")
        })
    }
}
  • viewmodel
class HiltViewModel @ViewModelInject constructor():ViewModel() {
	//使用liveData需要添加库
	//implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0-beta01'
    val mHitLiveData = liveData {
        emit(" i am a ViewModelInject")
    }
}

7.Hilt 如何和 Room 一起使用

@Module
@InstallIn(ApplicationComponent::class)
object RoomModule {
    @Provides
    @Singleton
    fun provideAppDataBase(application: Application): AppDataBase {
        return Room
            .databaseBuilder(application, AppDataBase::class.java, "jwxt.db")
            .fallbackToDestructiveMigration()
            .allowMainThreadQueries()
            .build()
    }

    @Provides
    @Singleton
    fun providePersonDao(appDatabase: AppDataBase): PersonDao {
        return appDatabase.personDao()
    }
}

Android Jetpack是一组用于Android应用程序开发的库集合,旨在帮助开发者简化开发流程、提高生产力和应用性能。它提供了一些常用的组件和工具,可以帮助开发者解决常见的开发问题。 要使用Android Jetpack,您需要在您的项目中添加相关的Jetpack库依赖。您可以通过在项目的build.gradle文件中添加相应的依赖来实现。例如,要使用Navigation组件,您可以添加以下依赖: implementation "androidx.navigation:navigation-fragment-ktx:2.3.5" implementation "androidx.navigation:navigation-ui-ktx:2.3.5" 一旦您添加了所需的依赖,您可以开始使用Jetpack组件了。对于Navigation组件,您可以使用Navigation图形化界面来创建和管理应用程序中的导航结构,并使用NavController来处理导航操作。 另外,为了更好地理解和学习Android Jetpack,您可以借助官方文档和示例代码来深入学习。官方文档提供了详细的介绍和用法示例,而示例代码可以帮助您更好地理解如何在实际项目中应用Jetpack组件。 总结起来,要使用Android Jetpack,您需要添加相关的库依赖,并根据具体的组件使用文档进行配置和使用。通过深入学习官方文档和示例代码,您可以更好地理解和掌握Jetpack使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android Jetpack架构开发,从入门到实战,看这一篇就够了](https://blog.youkuaiyun.com/Eqiqi/article/details/127534594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Android JetPack学习](https://blog.youkuaiyun.com/weixin_39069034/article/details/100170739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值