JetPack基本组件一:Lifecycle

LifeCycle

前言

Hello大家好,这里是BlueLzy。本文是JetPack全家桶系列文章的第一篇。作为一名Android开发者,在2021年必备的技能之一就是熟练使用Google为我们提供的开发组件,这一套组件的名字就是:JetPack。里面包括了许多不同功能的SDK,Google推出这套开发组件的目的就是为了能够让开发者在遵循Android系统的生命周期的同时,写出Bug更少,代码量更少,性能更好的App。

因此,这一系列文章会按照下面的顺序来介绍其中几个最主要的组件,在学习完这些基本组件之后,通过一个小项目在实践中学习API的时候,领会SDK的设计思想和原理等等。达到学以致用的目的。

下面是系列文章的目录:

  1. Lifecycle - 生命周期感知型组件
  2. LiveData - 可观察的数据存储器类
  3. ViewModel - 结合LiveData和LifeCycle的数据管理组件
  4. 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的工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值