使用Lifecycle管理声明周期的好处:简化我们对一些类似生命周期状态的管理,避免了代码重复。
Lifecycle主要两个角色:
- LifecycleOwner: 生命周期拥有者,如Activity/Fragment等类都实现了该接口并通过getLifecycle()获得Lifecycle,进而可通过addObserver()添加观察者。
- LifecycleObserver: 生命周期观察者,实现该接口后就可以添加到Lifecycle中,从而在被观察者类生命周期发生改变时能马上收到通知。
一、LifecycleObserver使用
1.建立一个新的activity,名字是LifecycleTest
public class LifecycleTest extends AppCompatActivity {
private static final String TAG = "LifecycleTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle_test);
init();
}
void init(){
getLifecycle().addObserver(new MyLifeObserve()); // 添加观察者
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart()");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop()");
}
}
2.建一个观察者类,MyLifeObserve
public class MyLifeObserve implements LifecycleObserver {
private static final String TAG = "MyLifeObserve";
@OnLifecycleEvent(value = Lifecycle.Event.ON_CREATE)
void lifeCreate() {
Log.d(TAG, TAG+":Lifecycle.Event.ON_CREATE");
}
@OnLifecycleEvent(value = Lifecycle.Event.ON_START)
void lifeStart() {
Log.d(TAG, TAG+":Lifecycle.Event.ON_START");
}
@OnLifecycleEvent(value = Lifecycle.Event.ON_RESUME)
void lifeResume() {
Log.d(TAG, TAG+":Lifecycle.Event.ON_RESUME");
}
@OnLifecycleEvent(value = Lifecycle.Event.ON_STOP)
void lifeStop() {
Log.d(TAG, TAG+":Lifecycle.Event.ON_STOP");
}
}
3.观察者类 MyLifeObserve 和 被观察者类 LifecycleTest ,联系在一起的方法:上文 LifecycleTest类中,getLifecycle().addObserver(new MyLifeObserve());
4.打印输出
二、LifecycleOwner使用
1.自定义 MyOwner 类 实现LifecycleOwner
class MyOwner implements LifecycleOwner {
LifecycleRegistry lifecycleRegistry;
private static final String TAG = "MyOwner";
void init(){
lifecycleRegistry = new LifecycleRegistry(this); // 注册
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return lifecycleRegistry;
}
void myViewOnCreated() {
lifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);
Log.d(TAG, TAG+":Lifecycle.State.CREATED");
}
void myViewOnResume() {
lifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);
Log.d(TAG, TAG+":Lifecycle.State.RESUMED");
}
void myViewOnStart() {
lifecycleRegistry.setCurrentState(Lifecycle.State.STARTED);
Log.d(TAG, TAG+":Lifecycle.State.STARTED");
}
}
2. 建观察者类,使用上面的观察者类 MyLifeObserve
3.建立观察者 MyLifeObserve 和 被观察者类 MyOwner 的联系
public class LifecycleTest extends AppCompatActivity {
private static final String TAG = "LifecycleTest";
private MyOwner myOwner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle_test);
myOwner = new MyOwner(); // 创建被观察者类对象
init();
myOwner.myViewOnCreated();
}
void init(){
myOwner.init();
myOwner.getLifecycle().addObserver(new MyLifeObserve()); // 添加观察者
}
@Override
protected void onResume() {
super.onResume();
myOwner.myViewOnResume();
Log.d(TAG, "onResume()");
}
@Override
protected void onStart() {
super.onStart();
myOwner.myViewOnStart();
Log.d(TAG, "onStart()");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop()");
}
}
4.打印输出
参考链接:
Android Jetpack系列之Lifecycle_android jetpack lifecycle_-小马快跑-的博客-CSDN博客
这位大佬写的很详细,受益颇多。
本文简单实现Lifecycle基本流程,在此记录。