lifecycle是什么
lifecycle是一个生命周期感知组件 它可以感知Fragment/Activity的生命周期 并且会防止内存泄漏,
为什么要用
lifecycle出来之前
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter.register();
locationManager.oncreate(this);
...
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.unregister();
locationManager.onDestroy();
...
}
这样在实际生产环境中,代码会越来越臃肿,需要在每个的Activity中 oncreate onDestroy中调用相应的方法,代码不易维护。
Lifecycle可以感知组件的生命周期,并对注册组件的接收者来分发生命周期状态
Lifecycle的用法
1. 构建Observer
//自定义类实现LifecycleObserver接口
public class SampleObserver implements LifecycleObserver {
/**
* 在需要调用的方法上使用OnLifecycleEvent注解来告诉Lifecycle当前方法的事件类型
* Lifecycle支持的事件类型后续会以表格写出
*/
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
log("onCreate");
getCurentState();
}
}
2. 注册Observer
//在Activity/Fragment中注册observer 在组件生命周期发生变化时会回调相应的函数
getLifecycle().addObserver(new SampleObserver();
Lifecycle支持的生命周期类型
Activity/Fragment的生命周期 | Lifecycle的Event事件 | Lifecycle的State |
---|---|---|
onCreate()/onActivityCreated() | ON_CREATE | CREATED |
onStart() | ON_START | STARTED |
onResume() | ON_RESUME | RESUMED |
onPause() | ON_PAUSE | STARTED |
onStop() | ON_STOP | CREATED |
onDestroy() | ON_DESTROY | DESTROYED |
- Lifecycle.STATE.INITIALIZED是尚未收到组件生命周期回调时的初始状态
- Lifecycle.Event.ON_ANY 只要组件生命周期发生变化,就会回调
- Lifecycle的Event事件属于被动回调 State状态属于主动获取
- 由表格可以看出只有State在RESUME的时候组件才可以与用户进行交互
- Event事件的回调和组件是属于串行 所以在Event事件里面不建议做过多的耗时操作
Lifecycle使用扩展
1.使用注解处理器提高性能
Lifecycle 已经默认包含在AndroidX的库中
lifecycle默认是使用反射来调用Observer的方法的,这样会对性能造成影响,导致程序变慢。
可以导入Lifecycle的注解处理器来提高性能 在编译期间生成Adapter类来避免反射
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
编译工程后会根据工程里面包含的LifecycleObserver 生成类名_LifeCycleAdapter的辅助类
lifecycle是如何处理反射和适配器的后面会在源码分析中给出
2.LifecycleObserver使用扩展
a.LifecycleEventObserver
包含事件发送的Observer多了一个onStateChanged函数
网友评论