Lifecycle学习笔记

1.生命周期感知组件

生命周期感知组件可以对Activity和Fragment这类的具有生命周期的组件在生命周期变化的时候做出相应。使用生命周期组件可以使你的代码更轻量,更有组织性,也更容易维护。

我们经常直接在Activity和Fragment的生命周期回调方法里编写与生命周期相关组件的代码(比如在onCreate中注册,在onDestroy中解绑),如果在某个Activity中这样的代码很多,或者有些组件不仅需要简单的注册和解绑,还需要在注册和解绑时添加逻辑判断,那这样的代码将会是难以修改和维护的,使用生命周期感知组件可以将这些依赖生命周期的代码从生命周期回调函数中移出去,放到那些组件自己的类中。

2.Lifecycle库

我们可以通过Architecture Components中的Lifecycle库中的类和接口构建生命周期感知组件。可以通过这篇文档,将Lifecycle库引入到AndroidStudio。

2.1LifecycleOwner

LifecycleOwner是一个接口,任何具有Android生命周期的组件都可以实现它(比如Activity和Fragment,在Support Library 26.1.0之后,都已经实现了LifecycleOwner接口),这个接口只有一个方法Lifecycle getLifecycle(),返回一个Lifecycle对象。

如果你想要自定义一个LifecycleOwner,你可以使用LifecycleRegistry类,但是要将生命周期相关的事件转发到这个类中。

public class MyActivity extends Activity implements LifecycleOwner {
        private LifecycleRegistry lifecycleRegistry;
        @Override    
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                lifecycleRegistry = new LifecycleRegistry(this);
                lifecycleRegistry.markState(Lifecycle.State.CREATED);
        }    
        @Override
        public void onStart() {
                super.onStart();
                lifecycleRegistry.markState(Lifecycle.State.STARTED);
        }    
        @NonNull
        @Override
        public Lifecycle getLifecycle() {
                return lifecycleRegistry;
        }
}
复制代码
2.2Lifecycle

Lifecycle是一个保存了其对应的LifecycleOwner组件的生命周期状态的类,并允许其他的组件对生命周期的改变进行观察。观察这个抽象类的源码,发现它只有两个枚举和一组添加和删除观察者Observer的方法。

Event枚举

包含ON_CREATEON_STARTON_RESUMEON_PAUSEON_STOPON_DESTROYON_ANY,这些生命周期事件对应着Activity和Fragment中的回调事件。

State枚举

包含DESTROYEDINITIALIZEDCREATEDSTARTEDRESUMED,表示LifecycleOwner组件当前的生命周期状态。

我们可以调用addObserver方法 ,为一个Lifecycle添加监听,监听生命周期拥有者LifecycleOwner的生命周期变化。myLifecycleOwner.getLifecycle().addObserver(new MyObserver());

2.3LifecycleObserver

LifecycleObserver通过注解的方法,来接收LifecycleOwner的生命周期变化的回调。

public class MyObserver implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connectListener() {
        ...    
    }
    
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disconnectListener() {
        ...    
    }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值