android jetpack的使用
Jetpack 新成员 Hilt
https://juejin.cn/post/6844904198803292173
引用HiDhl的Hilt
1.作用:依赖注入
2.为什么要使用依赖注入
-
依赖注入库会自动释放不再使用的对象,减少资源的过度使用。
-
在配置 scopes 范围内,可重用依赖项和创建的实例,提高代码的可重用性,减少了很多模板代码。
-
代码变得更具可读性。
-
易于构建对象。
-
编写低耦合代码,更容易测试。
3.依赖注入常用的注解
-
@HiltAndroidApp
1.所有使用 Hilt 的 App 必须包含一个使用 @HiltAndroidApp 注解的 Application。
aaa@qq.com 注解将会触发 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
- 首先在 project 的 build.gradle 添加以下依赖。
buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
}
}
- 然后在 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"
}
- 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"
}
}
- 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()
}
}
推荐阅读
-
使用 Ocelot 匹配路由的方法匹配路由
-
Android中的全局变量与局部变量使用小结
-
Android相册效果(使用C#和Java分别实现)
-
[日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况
-
调试 ASP 中使用的 Visual Basic COM 组件
-
C#中使用Path、Directory、Split、Substring实现对文件路径和文件名的常用操作实例
-
DevExpress的GridControl的使用以及怎样添加列和绑定数据源
-
无法访问,您可能没有权限使用网络资源的解决方法
-
Bandicam如何录制?屏幕录制矩形窗口的使用教程
-
RabbitMQ在Windows环境下的安装与使用