JectPack-Lifecycle使用

使用Lifecycle管理声明周期的好处:简化我们对一些类似生命周期状态的管理,避免了代码重复。

Lifecycle主要两个角色:

  1. LifecycleOwner: 生命周期拥有者,如Activity/Fragment等类都实现了该接口并通过getLifecycle()获得Lifecycle,进而可通过addObserver()添加观察者。
     
  2. LifecycleObserver: 生命周期观察者,实现该接口后就可以添加到Lifecycle中,从而在被观察者类生命周期发生改变时能马上收到通知。
一、LifecycleObserver使用

1.建立一个新的activity,名字是LifecycleTest 

public class LifecycleTest extends AppCompatActivity {
    private static final String TAG = "LifecycleTest";

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

    void init(){
        getLifecycle().addObserver(new MyLifeObserve()); // 添加观察者
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop()");
    }
}

2.建一个观察者类,MyLifeObserve 

public class MyLifeObserve implements LifecycleObserver {
    private static final String TAG = "MyLifeObserve";

    @OnLifecycleEvent(value = Lifecycle.Event.ON_CREATE)
    void lifeCreate() {
        Log.d(TAG, TAG+":Lifecycle.Event.ON_CREATE");
    }

    @OnLifecycleEvent(value = Lifecycle.Event.ON_START)
    void lifeStart() {
        Log.d(TAG, TAG+":Lifecycle.Event.ON_START");
    }

    @OnLifecycleEvent(value = Lifecycle.Event.ON_RESUME)
    void lifeResume() {
        Log.d(TAG, TAG+":Lifecycle.Event.ON_RESUME");
    }

    @OnLifecycleEvent(value = Lifecycle.Event.ON_STOP)
    void lifeStop() {
        Log.d(TAG, TAG+":Lifecycle.Event.ON_STOP");
    }
}

3.观察者类 MyLifeObserve 和 被观察者类 LifecycleTest ,联系在一起的方法:上文 LifecycleTest类中,getLifecycle().addObserver(new MyLifeObserve());

 

4.打印输出

二、LifecycleOwner使用

1.自定义 MyOwner 类 实现LifecycleOwner

class MyOwner implements LifecycleOwner {
    LifecycleRegistry lifecycleRegistry;
    private static final String TAG = "MyOwner";

    void init(){
        lifecycleRegistry = new LifecycleRegistry(this); // 注册
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return lifecycleRegistry;
    }


    void myViewOnCreated() {
        lifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);
        Log.d(TAG, TAG+":Lifecycle.State.CREATED");
    }

    void myViewOnResume() {
        lifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);
        Log.d(TAG, TAG+":Lifecycle.State.RESUMED");
    }

    void myViewOnStart() {
        lifecycleRegistry.setCurrentState(Lifecycle.State.STARTED);
        Log.d(TAG, TAG+":Lifecycle.State.STARTED");
    }
}

2. 建观察者类,使用上面的观察者类 MyLifeObserve 

3.建立观察者 MyLifeObserve  和 被观察者类 MyOwner 的联系

public class LifecycleTest extends AppCompatActivity {
    private static final String TAG = "LifecycleTest";
    private MyOwner myOwner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle_test);
        myOwner = new MyOwner(); // 创建被观察者类对象
        init();
        myOwner.myViewOnCreated(); 
    }

    void init(){
        myOwner.init();
        myOwner.getLifecycle().addObserver(new MyLifeObserve()); // 添加观察者
    }

    @Override
    protected void onResume() {
        super.onResume();
        myOwner.myViewOnResume();
        Log.d(TAG, "onResume()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        myOwner.myViewOnStart();
        Log.d(TAG, "onStart()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop()");
    }
}

4.打印输出

参考链接:

Android Jetpack系列之Lifecycle_android jetpack lifecycle_-小马快跑-的博客-CSDN博客 

这位大佬写的很详细,受益颇多。

本文简单实现Lifecycle基本流程,在此记录。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值