Android Jetpack之Lifecycle的使用及源码分析

Lifecycle生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码,此类代码更易于维护。

尤其是在Activity和Fragment在已经默认支持LifeCycle的情况下,我们更有理由来使用它,以便让我们的代码变得更加整洁以及可维护。

本文的内容:

一、Lifecycle的使用

Lifecycle 出现之前,我们通常都是在生命周期的onStart和onStop中处理,我们的逻辑(比如,获取定位等等),随着项目的基类,我们的onStart和onStop会越来越臃肿,并难以维护。

下面,我们通过Lifecycle来实现。

1.1,在Activity中使用

首先,我们创建一个Lifecycle观察者

public class MyActLifeCycleObserver implements LifecycleObserver {

    private String mObserverNum;

    public MyActLifeCycleObserver(String observerNum) {
        this.mObserverNum = observerNum;
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        printLog("onCreate");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        printLog("onStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        printLog("onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        printLog("onStop");
    }

    private void printLog(String eventStatus) {
        Log.d("liu.MyActivity", mObserverNum + ": " + eventStatus);
    }
}

然后,因为Activity默认已经实现了LifecycleOwner。我们可以直接添加到Activity中。如下

public class TestLifeCycleActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLifecycle().addObserver(new MyActLifeCycleObserver("observer.onCreate"));
    }
}

这样,就完成了,对TestLifeCycleActivity生命周期的监听。在MyActLifeCycleObserver中,处理该Activity的逻辑,很简单吧

在这里插入图片描述

1.2,在Application中使用

之前,我们判断App的前后台运行,都是通过registerActivityLifecycleCallbacks()。在onStart跟onStop中通过计数器来判断App的前后台运行的。

现在,我们完全可以通过LifeCycle,更优雅的实现该功能

首先,跟Activity的监听一样,创建一个观察者

/**
 * Application的Lifecycle。
 * 1,oncreate只会执行一次
 * 2,onDestroy不执行
 */
public class MyAppLifeCycleObserver implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        printLog("onCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    private void onStart() {
        printLog("onStart");
		//前台
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        printLog("onStop");
		//后台
    }

    private void printLog(String eventStatus) {
        Log.d("liu.MyAppLifeCycle", "--- " + eventStatus);
    }
}

然后,添加到自定义的Application中

public class MyLifecycleApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new MyAppLifeCycleObserver());
    }
}

最后,在MyAppLifeCycleObserver中,判断App的前后台逻辑。这样是不是更优雅呢。

这里需要注意的是,1,监听的Application的onCreate()方法,只会执行一次,不管是不是多进程;2,onDestroy方法不会执行

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值