【Android Jetpack】- Lifecycles(源码

2019-10-20  本文已影响0人  拔萝卜占坑

简介

用于感知Activity和Fragment生命周期。然后在不同生命周期执行不同的操作。

Activity中的Lifecycle源码分析

在Activity中我们可以这样添加Lifecycle监听

// 添加生命周期监听
lifecycle.addObserver(AJetpackLifecycleObserver())

Lifecycle监听类

class AJetpackLifecycleObserver : LifecycleObserver{
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun connectListener() {}
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun disconnectListener() { }
}

lifecycle是一个LifecycleRegistry对象,源码中这样初始化的:

private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

this是当前Activity实例,Activity实现了LifecycleOwner接口。

Lifecycle更多用法

在上面分析过程,可以看到会调用这个方法getCallback,源码如下:

    static GenericLifecycleObserver getCallback(Object object) {
        // 监听所以生命周期方法
        if (object instanceof FullLifecycleObserver) {
            return new FullLifecycleObserverAdapter((FullLifecycleObserver) object);
        }
        // 接收生命周期原始事件
        if (object instanceof GenericLifecycleObserver) {
            return (GenericLifecycleObserver) object;
        }

        final Class<?> klass = object.getClass();
        int type = getObserverConstructorType(klass);
        if (type == GENERATED_CALLBACK) {
            List<Constructor<? extends GeneratedAdapter>> constructors =
                    sClassToAdapters.get(klass);
            if (constructors.size() == 1) {
                GeneratedAdapter generatedAdapter = createGeneratedAdapter(
                        constructors.get(0), object);
                return new SingleGeneratedAdapterObserver(generatedAdapter);
            }
            GeneratedAdapter[] adapters = new GeneratedAdapter[constructors.size()];
            for (int i = 0; i < constructors.size(); i++) {
                adapters[i] = createGeneratedAdapter(constructors.get(i), object);
            }
            return new CompositeGeneratedAdaptersObserver(adapters);
        }
        return new ReflectiveGenericLifecycleObserver(object);
    }

这里分了两中回调方式,会创建不同的观察类,类型解析请自行查看源码。

返回自己的LifecycleRegistry对象

class MyActivity : Activity(), LifecycleOwner {

    private lateinit var lifecycleRegistry: LifecycleRegistry

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        lifecycleRegistry = LifecycleRegistry(this)
        lifecycleRegistry.markState(Lifecycle.State.CREATED)
    }

    public override fun onStart() {
        super.onStart()
        lifecycleRegistry.markState(Lifecycle.State.STARTED)
    }

    override fun getLifecycle(): Lifecycle {
        return lifecycleRegistry
    }
}

总结

Lifecycles不仅仅支持上面以注解的方法监听生命周期,还可以自己定义接收生命周期回调的方式。并且对Service生命周期监听也做了支持,具体可以点看Lifecycles相关库查看。

上一篇 下一篇

猜你喜欢

热点阅读