前言
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
网友评论