Android Jetpack架构组件—Lifecycle
Lifecycle是什么?
官方文档是这么描述的,Lifecycle它是一个类,用来存储相关组件的生命周期状态,如Activity或者Fragment等。并且允许其他组件对这些状态进行观察。
通俗的解释:
观察Activity或者Fragment的生命周期变化,在相应的生命周期回调中做一些操作。比如:比如在onDestory取消网络请求等;
Lifecycle框架关键类:
LifecycleOwner:生命周期的拥有者,一般是Activity和Fragment实现这个接口,只有一个方法getLifecycle():Lifecycle
Lifecycle:表示一个生命周期过程对象,可以添加生命周期观察者
Lifecycle.State:生命周期枚举,有DESTROYED、INITIALIZED、CREATED、STARTED、RESUMED
LifecycleRegistry:Lifecycle的子类,对Lifecycle中的抽象方法进行了实现
LifecycleObserver:生命周期观察者,虽是个空接口,但可以通过Lifecycle的注解定义所有的生命周期方法
Lifecycle.Event:生命周期事件,和Activity/Fragment的相应生命周期回调一一对应,有ON_CREATE、ON_START、
ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY、ON_ANY七种取值,一般和OnLifecycleEvent注解一起使用,用来
在LifecycleObserver中标注方法属于哪个生命周期
LifecycleDemo代码体现
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent (Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner, Lifecycle.Event event) {
Log.e("MyObserver", "==onAny==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_CREATE)
void onCreate() {
Log.e("MyObserver", "==onCreate==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_DESTROY)
void onDestroy() {
Log.e("MyObserver", "==onDestroy==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_START)
void onStart() {
Log.e("MyObserver", "==onStart==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_STOP)
void onStop() {
Log.e("MyObserver", "==onStop==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_RESUME)
void onResume() {
Log.e("MyObserver", "==onResume==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_PAUSE)
void onPause() {
Log.e("MyObserver", "==onPause==");
}
}
在Activity/Fragment的onCreate中注册生命周期
public class MyGroupActivity extends BaseActivity<VideoView>{
public static void start(Context context, String url, String title, boolean isLive) {
Intent intent = new Intent(context, MyGroupActivity.class);
intent.putExtra(IntentKeys.URL, url);
intent.putExtra(IntentKeys.IS_LIVE, isLive);
intent.putExtra(IntentKeys.TITLE, title);
context.startActivity(intent);
}
@Override
protected int getLayoutResId() {
return R.layout.activity_my_group;
}
@Override
protected void initView() {
super.initView();
MyGroupView myLineView = findViewById(R.id.my_group_view);
Lifecycle lifecycle = getLifecycle();
//第一种方式 :MyObserver 类进行监听生命周期变化
lifecycle.addObserver(new MyObserver());
//第二张方式: 当前界面的监听
getLifecycle().addObserver(new GenericLifecycleObserver() {
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
Log.e("MyObserver", "==event=="+event);
}
});
}
}
打印log
2021-07-28 16:30:54.705 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onCreate==
2021-07-28 16:30:54.707 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onStart==
2021-07-28 16:30:54.707 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onResume==
2021-07-28 16:30:56.937 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onPause==
2021-07-28 16:30:57.386 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onStop==
2021-07-28 16:30:57.387 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onDestroy==
小结:
1,lifycycle 其实是用观察者模式实现的,当 Activity 生命周期变化的时候,通知相应的 Observers 即观察者。
2, lifecycle 可以将释放资源的动作内聚在自身,减少与调用者之间的耦合。