这是我参与「第四届青训营」笔记创作活动的第2天。这次主要是梳理Lifecycle的一些知识点以及使用方式。
Lifecycle:
添加依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
使用Lifecycle可以解决项目开发中解耦的问题,通常使用在以下几个方面:
1.使用Lificycle解耦页面与组件
在不使用Lifecycle的开发中,需要在布局文件对应的Activity中操作其中的组件,随着业务逻辑的增加,每个Activity需要操作的组件越来越多,这就会使得每个Activity越来越臃肿,与各个组件的耦合度也很高。
而使用了Lifecycle之后,可以在每个组件中单独观察绑定的Activity的声明周期,根据其不同的周期进行控制。
我目前使用过Lifecycle的两种方式:
- 第一种是注解方式:
首先在Activity类中声明观察者对象,再将其传给getLifecycle.addObserver():
TestLifecycle testLifecycle = new TestLifecycle();
getLifecycle().addObserver(testLifecycle);
在观察者类中需要实现LifecycleObserver接口,注册为观察者,在定义好方法后使用@OnLifecycleEvent(Lifecycle.Event.ON_START)注解来设置在Activity的哪一个生命周期调用:
public class TestLifecycle implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void testMy() {
Log.d("LeoMy", "ON_START");
}
}
- 第二种是实现
LifecycleEventObserver来注册为观察者,将重写的方法中的event根据生命周期分发给不同的方法。
public class TestLifecycle implements LifecycleEventObserver {
private void testMy() {
Log.d("LeoMy", "ON_START");
}
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
switch (event) {
case ON_START:
testMy();
}
}
}
目前我也只是知道怎么使用这两种方法,对其还没有深入理解。
2.使用Lificycle解耦Service与组件
使用Lificycle解耦Service与组件的方法其实与前面很向,前面的两种方式都可以使用,只要在Service类中添加观察者即可,组件类可以通过实现LifecycleObserver或者LifecycleEventObserver来成为观察者。
3.使用ProcessLifecycleOwner监听应用程序生命周期:
用于application,针对整个应用程序的监听,与Activity数量无关
Lifecycle.Event.ON_CREATE只会调用一次,Lifecycle.Event.ON_DESTORY则永远不会被调用
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//给应用程序添加监听
ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
}
}
public class ApplicationObserver implements LifecycleObserver {
private static final String TAG = "ApplicationObserver";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Log.d(TAG, "Lifecycle.Event.ON_CREATE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Log.d(TAG, "Lifecycle.Event.ON_START");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Log.d(TAG, "Lifecycle.Event.ON_RESUME");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.d(TAG, "Lifecycle.Event.ON_PAUSE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Log.d(TAG, "Lifecycle.Event.ON_STOP");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Log.d(TAG, "Lifecycle.Event.ON_DESTROY");
}
}
使用Lifecycle的好处:
1.帮助开发者建立可感知的生命周期的组件。
2.组件在其内部管理自己的生命周期,从而降低模块耦合度。
3.降低内存泄漏发生的可能性。
4.Activity、Fragment、Service、Application均有Lifecycle支持。