谷歌架构组件Lifecycle的使用与分析

2018-03-01 11:17:15来源:https://www.jianshu.com/p/9e80c4b82fcf作者:wenson123人点击

分享


前言


Lifecycle是谷歌推出的架构组件之一, 实现主动响应activity,fragment组件生命周期变化,帮助开发者生产组织良好的代码,提供代码的可维护性。


如何使用:


新建observer类,使用注解方式观察生命周期


public class MyObserver implements LifecycleObserver {  
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}

在activity 或fragment onCreate添加注册


getLifecycle().addObserver(new MyObserver(getApplicationContext())); 

原理分析:




lifecycle.png

以getLifecycle().addObserver(new MyObserver(getApplicationContext()));


为代码分析入口。


我们知道Fragments 和 Activities 在 Support Library 26.1.0以后实现了LifecycleOwner接口。


    public interface LifecycleOwner {  
/**
* Returns the Lifecycle of the provider.
*
* @return The lifecycle of the provider.
*/
Lifecycle getLifecycle();
}

Fragments 和 Activity 持有LifecycleRegistry类的对象,而它是Lifecycle的具体实现类
··· java
public class Fragment implements LifecycleOwner{
LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);


@Override  
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
void performCreate(Bundle savedInstanceState) {
......
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}

void performStart() {
.......
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
.......
}

···
由Framework层的FragmentManger负责管理和执行fragment的生命周期函数performCreate()等


我们再分析下LifecycleRegistry核心类。


LifecycleRegistry扮演Observable的角色,帮助activity,fragment管理维护所有的Observer。


public class LifecycleRegistry extends Lifecycle {  


private FastSafeIterableMap<LifecycleObserver, ObserverWithState> mObserverMap =
new FastSafeIterableMap<>();


@Override
public void addObserver(LifecycleObserver observer) {
......
}


@Override
public void removeObserver(LifecycleObserver observer) {

mObserverMap.remove(observer);
}


}

总结:


Lifecycle组件实现观察者模式,使普通组件能够主动响应activity,fragment生命周期的变化,使activity fragment等UI controllers保持精简,提高代码的可维护性。


参考:


https://developer.android.google.cn/topic/libraries/architecture/lifecycle.html#use-cases


android 8.0 source code







最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台