Lifecycle的基本使用

本文介绍了谷歌的Lifecycle架构组件的基础使用,包括其集成方式、生命周期原理、如何监听组件状态以及如何作为LifecycleOwner。Lifecycle组件有助于改善代码组织,减少内存泄漏和系统崩溃。文章还详细讨论了在不同场景下如何使用Lifecycle,如处理位置服务、视频缓冲、网络连接和动画的生命周期,并强调了在Stop事件处理中的注意事项,避免在不适当的状态下修改UI。

转载请注明链接: https://blog.youkuaiyun.com/feather_wch/article/details/88630095

谷歌的架构组件 Lifecycle的基本使用

Lifecycle的基本使用

版本号:2019-03-22(11:00)


简介

1、Lifecycle组件是在其他组件的生命周期状态发生改变时,产生相应行为的一种组件。

2、Lifecycle能帮助产生更好组织且更轻量级的代码,便于维护。

3、在不使用Lifecycle时,常规的生命周期处理的缺点是什么?

  1. 常规方法是在Activity和Fragment的生命周期方法里面去实现独立组件的行为
  2. 这种模式会导致代码组织性差
  3. 增生更多的错误

4、Lifecycle的好处是什么?

  1. 通过使用可感知生命周期的组件,可以将生命周期方法中关于这些组件的代码,移动到组件的内部
  2. 通过android.arch.lifecycle提供的内容,可以让组件主动调节自身的行为,根据activity/fragment当前的生命周期状态进行调整。

5、几乎所有app组件都可以和Lifecycle关联起来,这些都是由操作系统或者运行在程序中的FrameWork层代码进行支持的。

使用Lifecycle能减少内存泄漏和系统崩溃的可能性

Lifecycle集成

1、Lifecycle的集成只需要在app的build.gradle中配置

    // 引入lifecycle
    def lifecycle_version = "2.0.0"
    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

Lifecycle的使用

原Activity中生命周期处理的代码

1、现在有一个功能是读取当前设备的位置。用常规的方法处理。

1-定位功能,start()连接到系统定位服务,stop()断开和系统定位服务的连接

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

    void start() {
   
   
        // connect to system location service
    }

    void stop() {
   
   
        // disconnect from system location service
    }
}

2-Activity中使用该功能。Activity的生命周期和定位功能紧密相连

class MyActivity extends AppCompatActivity {
   
   
    private MyLocationListener myLocationListener;

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

    @Override
    public void onStart() {
   
   
        super.onStart();
        myLocationListener.start();
        // manage other components that need to respond
        <
在 Android 开发中,`Lifecycle` 是 Jetpack 架构组件的一部分,用于帮助开发者更好地管理组件的生命周期,避免内存泄漏和不必要的资源消耗。它的核心思想是通过观察者模式,将生命周期感知能力赋予非生命周期组件,例如 ViewModel、Repository 等[^4]。 ### 基本使用方法 #### 1. 实现 `LifecycleOwner` 接口 `LifecycleOwner` 是一个接口,表示该类具有生命周期。在 `Activity` 和 `Fragment` 中,已经默认实现了该接口。如果开发者需要自定义具有生命周期感知能力的类,可以通过实现该接口并手动创建 `LifecycleRegistry` 实例来实现[^3]。 ```java public class MyActivity extends Activity implements LifecycleOwner { private LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this); @Override public Lifecycle getLifecycle() { return lifecycleRegistry; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); } @Override protected void onStart() { super.onStart(); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START); } @Override protected void onResume() { super.onResume(); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME); } @Override protected void onPause() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE); super.onPause(); } @Override protected void onStop() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP); super.onStop(); } @Override protected void onDestroy() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); super.onDestroy(); } } ``` #### 2. 创建 `LifecycleObserver` 观察者 `LifecycleObserver` 是一个接口,用于监听生命周期事件。开发者可以通过注解 `@OnLifecycleEvent` 来指定监听的生命周期事件。 ```java public class MyObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) public void onCreate() { // 处理 ON_CREATE 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { // 处理 ON_START 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onResume() { // 处理 ON_RESUME 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onPause() { // 处理 ON_PAUSE 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { // 处理 ON_STOP 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestroy() { // 处理 ON_DESTROY 事件 } } ``` #### 3. 添加观察者 在 `Activity` 或 `Fragment` 中,通过 `getLifecycle().addObserver()` 方法添加 `LifecycleObserver` 实例,这样就可以在生命周期变化时自动触发相应的回调方法。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyObserver observer = new MyObserver(); getLifecycle().addObserver(observer); } ``` #### 4. 使用 `Lifecycle.State` 控制状态 `Lifecycle` 提供了 `State` 枚举,表示当前生命周期的状态。开发者可以使用它来判断当前组件的生命周期状态,并根据状态执行相应的操作。 ```java Lifecycle lifecycle = getLifecycle(); if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { // 当前生命周期状态至少为 STARTED } ``` ### 生命周期事件与状态的对应关系 | 生命周期事件 | 对应状态 | |----------------------|----------------| | ON_CREATE | CREATED | | ON_START | STARTED | | ON_RESUME | RESUMED | | ON_PAUSE | STARTED | | ON_STOP | CREATED | | ON_DESTROY | DESTROYED | 通过上述方法,开发者可以轻松地实现生命周期感知功能,从而优化资源管理,提升应用的稳定性和可维护性[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值