Lifecycle是什么
Lifecycle是Android Architecture Components 的一个组件,用于将系统组件(Activity、Fragment等等)的生命周期分离到 Lifecycle 类,Lifecycle 允许其他类作为观察者,观察组件生命周期的变化。
Lifecycle是为了实现Android中Activity和Fragment生命周期中代码逻辑控制的解耦。比如之前我们经常在Activity中注册定位监听动态接收位置信息,在Activity的onStrat()的方法内启动定位,
在Activity的onStop()方法中停止定位来节省资源,使用LifeCycle后就不需要在Activity的声明周期方法中操作定位监听,在定位监听类中获取Activity的生命周期并控制是否注册和移除监听操作。避免Activity销毁时,定位方法还在执行,造成内存泄露问题。
Lifecycle有两个枚举用于追踪生命周期中的状态。
1.Event:这是生命周期的事件类,会在Framework和LifeCycle间传递,这些事件映射到Activity和Fragment的回调事件中。
2.State:LifeCycle所持有Activity或Fragment的当前状态。
Lifecycle主要的方法
1. public abstract void addObserver(@NonNull LifecycleObserver observer);
用于添加一个LifecycleObserver,当LifecycleOwner更改状态时,LifecycleObserver将得到通知
2. public abstract State getCurrentState();
用于获取当前Activity或者Fragment生命周期状态
LifecycleObserver实现了这个接口的类可以监听 Acitivity,Fragment的生命周期方法
LifeCycleOwner是一个接口Activity和Fragment只要实现这个接口就能配合LifeCycle实现生命周期被监听。可以通过getLifecycle()获取一个LifeCycle对象
具体实现如下:
(一)导入Lifecycle库
//lifecycle相关
implementation "android.arch.lifecycle:livedata:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
(二)定位监听类实现LifecycleObserver接口
public class MyLocationListener implements LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void create(){
//对应Activity的onCreate()方法
Log.e("MyListener","create");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void resume(){
//对应Activity的onResume()方法
Log.e("MyListener","resume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void pause(){
//对应Activity的onPause()方法
Log.e("MyListener","pause");
}
}
(三)Activity或者Fragment实现LifecycleOwner接口
public class OneChatActivity extends BaseActivity implements LifecycleOwner{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//相当于添加MyLocationListener类来观察Activity生命周期变化
getLifecycle().addObserver(new MyLocationListener());
}
}
更多资料查询
https://developer.android.google.cn/topic/libraries/architecture/lifecycle
https://www.jianshu.com/p/9b3da5fe0ff6
https://blog.csdn.net/g6uqwseseo/article/details/72621241