Jetpack基础知识|青训营笔记

180 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第10天

Jetpack是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化我们 的开发过程。
Jetpack中的组件有一个特点,它们大部分不依赖于任何Android系统版本,这意 味着这些组件通常是定义在AndroidX库当中的,并且拥有非常好的向下兼容性。

Jetpack主要由基础、架构、行为、界面这4个部分组成。
目前Android官方最为推荐的 项目架构就是MVVM,因而Jetpack中的许多架构组件是专门为MVVM架构量身打造的。

ViewModel

  • ViewModel应该可以算是Jetpack中最重要的组件之一了。
  • 其实Android平台上之所以会出现诸 如MVP、MVVM之类的项目架构,就是因为在传统的开发模式下,Activity的任务实在是太重了,既要负责逻辑处理,又要控制UI展示,甚至还得处理网络回调,等等。
  • 在一个小型项目中 这样写或许没有什么问题,但是如果在大型项目中仍然使用这种写法的话,那么这个项目将会 变得非常臃肿并且难以维护,因为没有任何架构上的划分。
  • 而ViewModel的一个重要作用就是可以帮助Activity分担一部分工作,它是专门用于存放与界 面相关的数据的。
    也就是说,只要是界面上能看得到的数据,它的相关变量都应该存放在 ViewModel中,而不是Activity中,这样可以在一定程度上减少Activity中的逻辑。
  • 另外,ViewModel还有一个非常重要的特性。我们都知道,当手机发生横竖屏旋转的时候, Activity会被重新创建,同时存放在Activity中的数据也会丢失。而ViewModel的生命周期和 Activity不同,它可以保证在手机屏幕发生旋转的时候不会被重新创建,只有当Activity退出的 时候才会跟着Activity一起销毁。
    因此,将与界面相关的变量存放在ViewModel当中,这样即 使旋转手机屏幕,界面上显示的数据也不会丢失。

image.png

Lifecycles

  • 在编写Android应用程序的时候,可能会经常遇到需要感知Activity生命周期的情况。比如说, 某个界面中发起了一条网络请求,但是当请求得到响应的时候,界面或许已经关闭了,这个时 候就不应该继续对响应的结果进行处理。
    因此,我们需要能够时刻感知到Activity的生命周期, 以便在适当的时候进行相应的逻辑控制。
  • 感知Activity的生命周期并不复杂,但问题在于,在一个Activity中去感知它的生命周期非常简单,而如果要在一个非Activity 的类中去感知Activity的生命周期,应该怎么办呢?
  • 这种需求是广泛存在的,同时也衍生出了一系列的解决方案,比如通过在Activity中嵌入一个隐 藏的Fragment来进行感知,或者通过手写监听器的方式来进行感知,等等。

LiveData

  • LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生 变化的时候通知给观察者。
  • LiveData特别适合与ViewModel结合在一起使用,虽然它也可以单 独用在别的地方,但是在绝大多数情况下,它是使用在ViewModel当中的。