【背上Jetpack之Lifecycle】万物基于 Lifecycle 默默无闻大用处

本文介绍了Android Jetpack中的Lifecycle组件,阐述了手动管理生命周期的痛点,并探讨了Lifecycle如何简化这一过程。通过观察者模式,Lifecycle让组件能够感知外部生命周期,实现统一管理和任务及时停止。分析了Lifecycle的源码结构,包括LifecycleOwner和LifecycleObserver的角色,以及在Activity和Fragment中的应用。
摘要由CSDN通过智能技术生成

系列文章

【背上Jetpack】Jetpack 主要组件的依赖及传递关系

【背上Jetpack】AdroidX下使用Activity和Fragment的变化

【背上Jetpack之Fragment】你真的会用Fragment吗?Fragment常见问题以及androidx下Fragment的使用新姿势

【背上Jetpack之Fragment】从源码角度看 Fragment 生命周期 AndroidX Fragment1.2.2源码分析

【背上Jetpack之OnBackPressedDispatcher】Fragment 返回栈预备篇

【背上Jetpack之Fragment】从源码的角度看Fragment 返回栈 附多返回栈demo

【背上Jetpack】绝不丢失的状态 androidx SaveState ViewModel-SaveState 分析

【背上Jetpack之ViewModel】即使您不使用MVVM也要了解ViewModel ——ViewModel 的职能边界

目录

前言

Android 中有一个比较重要的概念:「生命周期」。刚毕业去面试,总会被问到「四大组件的生命周期」这类的问题。17年的 IO 大会上,Google 推出了 Lifecycle-Aware Components(生命周期感知组件),帮助开发者组织更好,更轻量,易于维护的代码

本文介绍 Lifecycle 的职责以及简单分析 lifecycle 如何感知 activity 和 fragment ,帮助您对 Lifecycle 有一个感性的认识

万物基于 Lifecycle

手动管理生命周期的痛苦你不懂

lifecycles

鲁迅曾说过:万物基于 Lifecycle

哦不对

Android 中的视图控制器就有这么多生命周期的情况,所以处理好生命周期十分重要,否则会导致内存泄漏甚至是程序崩溃。这里引用 官方文档 的例子

class MyLocationListener {
   
    public MyLocationListener(Context context, Callback callback) {
   
        // ...
    }

    void start() {
   
        // 连接系统的定位服务
    }

    void stop() {
   
        // 与系统的定位服务断开连接
    }
}

class MyActivity extends AppCompatActivity {
   
    private MyLocationListener myLocationListener;

    @Override
    public void onCreate(...) {
   
        myLocationListener = new MyLocationListener(this, (location) -> {
   
            // 更新 UI
        });
    }

    @Override
    public void onStart() {
   
        super.onStart();
        myLocationListener.start();
        //管理其他需要响应 activity 生命周期的组件
    }

    @Override
    public void onStop() {
   
        super.onStop();
        myLocationListener.stop();
        //管理其他需要响应 activity 生命周期的组件
    }
}

此示例看起来不错,在实际的应用程序中,您仍然会响应生命周期的当前状态而进行过多的调用来管理 UI 和其他组件。 管理多个组件会在生命周期方法中放置大量代码,例如 onStart() 和 onStop(),这使它们难以维护

而且,不能保证组件在 activity 或 fragment 停止之前就已启动。 如果我们需要执行长时间运行的操作(例如onStart() 中的某些配置检查),则可能会导致争用情况,其中onStop() 方法在 onStart() 之前完成,从而使组件的生存期超过了所需的生存期。

class MyActivity extends AppCompatActivity {
   
    private MyLocationListener myLocationListener;

    public void onCreate(...) {
   
        myLocationListener = new MyLocationListener(this, location -> {
   
            // 更新 UI
        });
    }

    @Override
    public void onStart() {
   
        super.onStart();
        Util.checkUserStatus(result 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值