Jetpack初识

简介: Google为了开发者更好的设计软件的代码架构以及写出高质量的代码,推出Jetpack组件,将许多好用的代码进行封装,总之使用Jetpack可以使得我们利用更少的时间开发出更高质量的软件

一、Jetpack产生背景

Google为了开发者更好的设计软件的代码架构以及写出高质量的代码,推出Jetpack组件,将许多好用的代码进行封装

总之使用Jetpack可以使得我们利用更少的时间开发出更高质量的软件

二、ViewModel

ViewModel的生命周期比Activity长,随Activity的销毁而销毁,可以保证手机屏幕旋转时ViewModel的数据不会丢失

可以将与界面相关的数据放入ViewModel以减轻Activity的负担

由于ViewModel的生命周期比Activity长,故不能直接创建ViewModel,需要通过ViewModelProvider来获取实例

ViewModelProvider(<activity或者fragment的实例>).get(<viewModel的实例>::class.java)

向ViewModel中传递参数

利用ViewModelProvider的Factory的接口来实现传递数据

三、Lifecycles

利用LifecycleObserver进行观察Activity的生命周期,举个例子

class MyObserver(val lifecycle: Lifecycle):LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun activityStart(){
        Log.d("MyObserver","activityStart")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun activityStop(){
        Log.d("MyObserver","activityStop")
    }
}
//这里采用注解的方式传入了生命周期事件
//这里的方法就会在各种生命周期事件触发时进行调用

生命周期发生变化时需要采取以下调用方式才可以得到通知

lifecycleOwner.lifecycle.addObserver(MyObserver(lifecycle))
//lifecycleOwner一般是指Activity或者fragment

也可以获取当前的生命周期状态

lifecycle.currentState

四、LiveData

LiveData可以将数据变化传给观察者,可以是任何类型的数据,当ViewModel数据发生变化时,LiveData可以观察到数据的变化

子线程给LiveData设置数据,一定要调用postValue(),不能使用setValue,否则会发生崩溃

这里也稍微提一下map与switchMap的区别以及使用场景

//Map
//当我们不想要全部的LiveData暴露给外部,我们可以使用Map,举个小栗子
//不过Map的LiveData数据是在ViewModel里面创建的,外部创建的话就使用switchMap
val userName:LiveData<String> = Transformations.map(userLiveData){user ->
                                                                  "${user.firstName} ${user.lastName}"
                                                                 }
//这里将数据转化成两个字符串的拼接

//switchMap
//当LiveData实例是外部创建的时候,需要使用switchMap
//让其转化成可以观察的LiveData

五、Room

Room是Google提供的一个便捷开发者操作数据库的一个组件,利用Room组件可以便捷的操作数据库而不需要编写大量的SQL代码

主要由Entity,Dao,Database三个部分组成

1.Entity

即数据类,加上@Entity注解使得我们可以使用面向对象的方法来进行数据库操作
相当于数据库中的一张表

2.Dao

Data Access Object
通常在这里进行数据库的操作,直接在这里编写数据库的逻辑代码

3.Database

//这里将Entity和Dao连接在一起
//需要定义三部分的内容
1.数据库版本号
2.包含的实体类
3.Dao层的访问实例
//需要使用全局context,即ApplicationContext

这里当时出现了虚拟机的LogService坏掉的情况,开台新的就可以了,调试了好久

Room进行数据库升级比较的复杂,而且每次升级都需要编写大量的逻辑,虽然Google这里提供了粗暴简单的方法

fallbackToDestructiveMigration()
//只要数据库升级,直接销毁重建
//适用于前期测试使用

升级主要利用Migration,具体操作可以用到了再看

六、WorkManager

WorkerManager的基本用法

1.定义一个任务,并且编写他的后台逻辑
2.设置任务的启动条件,和一些约束条件并且构建后台任务的请求
3.将任务传入WorkManager的enqueue方法

举个栗子

class SimpleWorker(context: Context,params:WorkerParameters):Worker(context,params) {

    override fun doWork(): Result {
        Log.d("SimpleWorker","do work in SimpleWorker")
        return Result.success()
    }

}
//这里定义了一个工作类,只需要在Worker类里面重写唯一的一个方法即可

val request = OneTimeWorkRequest.Builder(SimpleWorker::class.java)
                .setInitialDelay(30,TimeUnit.SECONDS)
                .addTag("simple")
                .build()
WorkManager.getInstance(this).enqueue(request)
//这里就是构建后台任务的请求,几个方法都比较简单
//具体可以用到了边查边用

也可以开启链式任务,使用beginWith()方法开启任务,then()接入下一个任务

七、Kotlin:DSL构建专用语法结构

主要采用高阶函数和lambda表达式的方法构建,尤其是高阶函数使得代码更加简洁,

举个简单的小栗子

class Dependency{
    val libraries = ArrayList<String>()

    fun implementation(lib:String){
        libraries.add(lib)
    }
}
//定义好这样一个类之后,就可以采用和gradle类似的语法编写依赖

fun dependencies(block:Dependency.() -> Unit):List<String>{
    val dependency  = Dependency()
    dependency.block()
    return dependency.libraries
}
//这个函数进行包装

val libraries = dependencies{
    implementation("com1")
    implementation("com2")
}
//这样的代码是不是非常像gradle后面的依赖的写法
目录
相关文章
|
6月前
|
XML 前端开发 IDE
在 Compose 中使用 Jetpack 组件库
在 Compose 中使用 Jetpack 组件库
353 0
|
安全 API Android开发
Jetpack架构组件库-Jetpack入门介绍
Jetpack架构组件库-Jetpack入门介绍
147 0
|
前端开发 Android开发
Jetpack Compose 学习指南(二)
Jetpack Compose 学习指南(二)
164 0
|
存储 XML 安全
Jetpack DataStore 你总要了解一下吧?
一、DataStore 介绍 DataStore 是 Android Jetpack 中的一个组件,它是一个数据存储的解决方案,跟 SharedPreferences 一样,采用key-value形式存储。 DataStore 保证原子性,一致性,隔离性,持久性。尤其是,它解决了 SharedPreferences API 的设计缺陷。 Jetpack DataStore 是经过改进的新版数据存储解决方案,旨在取代 SharedPreferences,让应用能够以异步、事务方式存储数据。
1001 0
Jetpack DataStore 你总要了解一下吧?
|
5月前
深入了解 Jetpack Compose 中的 Modifier
深入了解 Jetpack Compose 中的 Modifier
100 0
|
XML JSON Java
Jetpack 系列之Paging3,看这一篇就够了~
Jetpack 系列之Paging3,看这一篇就够了~
3167 4
Jetpack 系列之Paging3,看这一篇就够了~
|
XML Android开发 数据安全/隐私保护
Jetpack Compose 学习指南(一)
Jetpack Compose 学习指南
292 0
|
Java API 开发工具
Jetpack 之 LifeCycle 组件使用详解
LifeCycle 是一个可以感知宿主生命周期变化的组件。常见的宿主包括 Activity/Fragment、Service 和 Application。LifeCycle 会持有宿主的生命周期状态的信息,当宿主生命周期发生变化时,会通知监听宿主的观察者。
122 0
Jetpack 之 LifeCycle 组件使用详解
|
Java API 调度
Jetpack Hilt有哪些改善又有哪些限制?
Jetpack Hilt有哪些改善又有哪些限制?
Jetpack Hilt有哪些改善又有哪些限制?
|
存储 安全 API
Jetpack之DataStore使用
前言DataStore提供了一种安全且持久的方式来存储少量数据。它不支持部分更新:如果任何字段被修改,整个对象将被序列化并持久到磁盘。它是线程安全的,非阻塞的。特别是,它解决了SharedPreferences这些设计缺陷:同步API鼓励违反StrictModeapply和commit没有发出错误信号的机制apply将阻塞fsync上的UI线程不持久-它可以返回尚未持久的状态没有一致性或事务语义在
280 0
Jetpack之DataStore使用