Android Jetpack:Lifecycle使用教程

本文介绍了如何使用Android Jetpack的Lifecycle库,简化模块在Activity或Fragment生命周期中的操作,通过示例展示了如何创建GPSObserver并监听其生命周期方法。读者将学会如何利用DefaultLifecycleObserver和LifecycleEventObserver,提升代码组织和性能效率。

介绍

Lifecycle是Android Jetpack中用于管理生命周期的库。无论是MVP模式还是MVVM模式,Activity充当的都是View(视图)的角色。然而随着程序功能越来越复杂,很多模块都需要在相应的生命周期上停止或释放内存,这就使得Activity的代码不得不写大量与视图无关的代码,就如下面这个例子。通过Lifecycle就能够很好的解决这个问题。

public class MainActivity extends AppCompatActivity implements ...{
   ...

    @Override
    protected void onStop() {
        super.onStop();
       
        GPS.getInstance().stop();
        TemperatureSensor.getInstance().stop();
        VideoManager.getInstance().stop();
        ...
    }
}

使用方法

在使用Lifecycle前,先把库导进来,注意Lifecycle的版本。

dependencies {
	...
    def lifecycle_version = "2.5.0-alpha01"
    implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
}

Lifecycle使用了观察者模式,被观察者是Activity或Fragment,观察者就是那些需要在生命周期上操作的模块。

我们来定义一个类,叫GPSObserver,实现DefaultLifecycleObserver接口。

public class GPSObserver implements DefaultLifecycleObserver {
}

根据实际需要重写生命周期的方法。

public class GPSObserver implements DefaultLifecycleObserver {
    private final static String TAG = "GPSObserver";

    @Override
    public void onCreate(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onCreate");
    }

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onStart");
    }

    @Override
    public void onResume(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onResume");
    }

    @Override
    public void onPause(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onPause");
    }

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onStop");
    }

    @Override
    public void onDestroy(@NonNull LifecycleOwner owner) {
        Log.d(TAG, "GPS onDestroy");
    }
}

最后把观察者添加至LifecycleOwner即可。Activity已经实现了LifecycleOwner接口,所以直接通过getLifecycle方法获取LifecycleOwner就行了。

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getLifecycle().addObserver(new GPSObserver());
    }
}

最后测试一下结果,GPS模块生命周期方法随Activity的状态变化而调用。

2022-02-06 14:19:26.524 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onCreate
2022-02-06 14:19:26.539 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStart
2022-02-06 14:19:26.540 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onResume
2022-02-06 14:20:41.386 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onPause
2022-02-06 14:20:41.397 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStop
2022-02-06 14:20:45.246 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStart
2022-02-06 14:20:45.247 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onResume
2022-02-06 14:20:46.673 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onPause
2022-02-06 14:20:47.415 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStop
2022-02-06 14:20:47.418 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onDestroy

当然,也可以让GPSObserver实现LifecycleEventObserver接口,这样就可以监听Activity的生命周期状态了。

public class GPSObserver implements LifecycleEventObserver {
    private final static String TAG = "GPSObserver";


    @Override
    public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
        switch (event.getTargetState()){
            case INITIALIZED:
                Log.d(TAG, "INITIALIZED");
                break;

            case CREATED:
                Log.d(TAG, "CREATED");
                break;

            case STARTED:
                Log.d(TAG, "STARTED");
                break;

            case RESUMED:
                Log.d(TAG, "RESUMED");
                break;

            case DESTROYED:
                Log.d(TAG, "DESTROYED");
                break;
        }
    }
}

那么DefaultLifecycleObserver和LifecycleEventObserver有什么区别吗?DefaultLifecycleObserver监听的是生命周期的回调方法,LifecycleEventObserver监听的是生命周期的状态,如下图所示。
在这里插入图片描述

最后

本篇文章讲解了如何通过Lifecycle来操作模块的生命周期。

参考文章

《Android开发者文档》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值