• Android Jetpack之LifeCycle


    目录

    Jetpack

    1、那么Jetpack是什么呢?

    2、为何使用Jetpack?

    3、 Jetpack与AndroidX

    LifeCycle

    1、LifeCycle的作用​编辑

    2、 LifeCycle应用


    Jetpack

            Jetpack,我觉得翻译为“飞行器”更好听,因为Google针对编程历史乱象,整理出一套组件库,帮助开发者创造更完美的应用作品。现在市面上,很多公司招聘面试要求渐渐把Jetpack看作必会技能,Google也在疯狂的安利Jetpack组件,和Kotlin一样属于亲儿子一样了。

    1、那么Jetpack是什么呢?

            如图所示,Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。

    2、为何使用Jetpack?

    • 遵循最佳做法:Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。
    • 消除样板代码:Android Jetpack 可以管理各种繁琐的Activity(如:后台任务、导航和生命周期管理),以便你可以专注于打造出色的应用。
    • 减少不一致:这些库可在各种Android 版本和设备中以一致的方式运作,助你降低复杂性!

    3、 Jetpack与AndroidX

    • AndroidX命名空间中包含Android Jetpack库
    • AndroidX代替Android Support Library
    • AAC(Android Architecture Component) 中的组件并入AndroidX
    • 其他一些需要频繁更新和迭代的特性也并入了AndroidX


    LifeCycle

            LifeCycle顾名思义是用来帮助开发者建立可感知生命周期的jetpack组件之一。LifeCycle在其内部管理自己的生命周期,从而解藕页面和组件,降低内存泄露发生的可能性,Activity、Fragment、Service、Application均有LifeCycle支持。

    1、LifeCycle的作用

    如图所示,LifeCycle用来监听Activity与Fragment的生命周期变化。

    2、 LifeCycle应用

            例如,一般我们在Activity中使用计时器时会在生命周期onPause和onReSume对其操作。因为计时器是长周期的变量,如果Activity关闭了,但没有关闭计时器,就会继续持用activity的引用造成内存泄露。

    1、设计组件

    1. //自定义了控件,继承了Chronometer计时器,实现了LifecycleObserver接口
    2. @SuppressLint("ViewConstructor")
    3. class MyChronometer : Chronometer, LifecycleObserver {
    4. constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
    5. var elapsedTime: Long = 0
    6. //计时开始 ,方法添加了注解
    7. @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    8. open fun startMeter() {
    9. base = SystemClock.elapsedRealtime() - elapsedTime
    10. start()
    11. }
    12. //计时暂停 ,方法添加了注解
    13. @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    14. open fun stopMeter() {
    15. elapsedTime = SystemClock.elapsedRealtime() - base
    16. stop()
    17. }
    18. }

    2、使用组件

    1. class Step2Activity : AppCompatActivity() {
    2. private var chronometer: MyChronometer? = null
    3. override fun onCreate(savedInstanceState: Bundle?) {
    4. super.onCreate(savedInstanceState)
    5. setContentView(R.layout.activity_main)
    6. //组件
    7. chronometer = findViewById(R.id.chronometer)
    8. //添加观察者
    9. lifecycle.addObserver(chronometer!!)
    10. }
    11. }

     3、总结LifeCycle的使用

       1、继承LifeCycle Observer方法

    1. class lifecycleTest : LifecycleObserver {
    2. @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    3. fun onCreate() {
    4. }
    5. @OnLifecycleEvent(Lifecycle.Event.ON_START)
    6. fun onStart() {
    7. }
    8. @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    9. fun onResume() {
    10. }
    11. @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    12. fun onPause() {
    13. }
    14. @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    15. fun onStop() {
    16. }
    17. @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    18. fun onDestroy() {
    19. }
    20. }

    2、 添加观察者

      lifecycle.addObserver(lifecycleTest)
    

  • 相关阅读:
    matlab 二维或三维三角剖分
    Python - 字符串编解码
    vue中keep-alive怎么清除组件的缓存
    含文档+PPT+源码等]精品微信小程序ssm社区心理健康服务平台+后台管理系统|前后分离VUE[包运行成功]微信小程序项目源码Java毕业设计
    前端学习之HTML
    【6.26更新】Win11 23H2 22631.3810镜像:免费下载!
    CADD课程学习(5)-- 构建靶点已知的化合结构(ChemDraw)
    kubernetes集群部署
    Google Earth Engine(GEE)—— 下载一个最简单的sentinel-2影像的单日ndvi下载
    iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)
  • 原文地址:https://blog.csdn.net/csdn_aiyang/article/details/126783156