LifeCycle
前言
Hello大家好,这里是BlueLzy。本文是JetPack全家桶系列文章的第一篇。作为一名Android开发者,在2021年必备的技能之一就是熟练使用Google为我们提供的开发组件,这一套组件的名字就是:JetPack。里面包括了许多不同功能的SDK,Google推出这套开发组件的目的就是为了能够让开发者在遵循Android系统的生命周期的同时,写出Bug更少,代码量更少,性能更好的App。
因此,这一系列文章会按照下面的顺序来介绍其中几个最主要的组件,在学习完这些基本组件之后,通过一个小项目在实践中学习API的时候,领会SDK的设计思想和原理等等。达到学以致用的目的。
下面是系列文章的目录:
- Lifecycle - 生命周期感知型组件
- LiveData - 可观察的数据存储器类
- ViewModel - 结合LiveData和LifeCycle的数据管理组件
- DataBinding - 声明式数据驱动UI组件
除了上面介绍了这几个组件,JetPack其实还提供了其他许多组件,包括:WorkManager,Navigation,Paging等等
我们可以通过Google的官方网站进行查阅:
本文目录
什么是Lifecycle
一般来说,无论是Github上优秀的开源库,还是Google推出的新技术,都是为了解决旧的技术遗留的历史问题,也就是说,我们在学习新技术的时候,不仅要学会如何使用API,还要思考“为什么要有这个技术?”,“它和之前的解决方案相比,有什么优势?”
当然,要知道“Why”,首先还是要知道“What”和“How”。知其然,知其所以然。
远古时代
在Android开发中,我们需要遵循组件的生命周期,例如在**onStart()和onResume()的时候更新UI,在onStop()和onDestroy()**的时候停止后台任务和释放资源。
举个常见的例子:我们需要在Activity的生命周期到底onCreate()的时候调用接口请求数据,然后在onResume()的时候设置到UI界面中,并且在onStop()的时候停止请求,否则有可能会出现内存泄漏的情况。
class MyActivity : AppCompatActivity() {
private lateinit var request: MainRequset
private var data: List<String> = mutableListOf()
override fun onCreate(...) {
request= MainRequset(this) {
list ->
// update UI
data = list
}
}
public override fun onResume() {
super.onStart()
textView.setText(data[0])
}
public override fun onStop() {
super.onStop()
request.stop()
}
}
随着项目不断迭代,需要在生命周期的不同阶段做的任务也越来越多,导致了这几个生命周期方法里面的业务代码越来越臃肿,最后接手的开发者难以维护。
class MyActivity : AppCompatActivity() {
private lateinit var request: MainRequest // 首页数据
private lateinit var firebase: FireBase // 性能监控
private lateinit var pushNotification: PushNotification // 推送服务
private lateinit var startup: SplashScreen // 开屏广告
private var data: List<String> = mutableListOf()
override fun onCreate(...) {
request = MainRequest(this) {
list ->
// update UI
data = list
}
firebase = FireBase(this) {
isSucceed ->
// do Something
}
pushNotification = PushNotification(this) {
isSucceed->
// do Something
}
startup = SplashScreen(this) {
isSucceed->
// do Something
}
}
public override fun onResume() {
super.onStart()
textView.setText(data[0])
//...
}
public override fun onStop() {
super.onStop()
request.stop()
firebase.stop()
pushNotification.stop()
startup.stop()
}
}
Lifecycle的出现
这里我们引用Google Developers的图来说明Lifecycle的工