Lifecycle是2017年 Google I/O 大会推出来的,它属于 Architecture Compoment 里面的一个组件,是一个生命周期感知组件。一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。
目前,Lifecycle已经纳入新版本的AppCompatActivity和Fragment中了,并且Lifecycle还是Android Jetpack中其他两个组件LiveData和ViewModel的基础。
一、为什么要引进Lifecycle?
我们在处理Activity或者Fragment组件的生命周期相关时,不可避免会遇到这样的问题:我们在Activity的onCreate()中初始化某些成员(比如MVP架构中的Presenter,或者AudioManager、MediaPlayer等),在onDestroy中释放这些资源。太多的类似调用会导致 onCreate() 和 onDestroy() 方法变得非常臃肿。
二、Lifecycle的使用
1. 添加依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
2. 实现LifecycleObserver接口
Java7:
public class Java7Observer implements LifecycleObserver {
private static final String TAG = Java7Observer.class.getSimpleName();
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() { Log.d(TAG, "onCreate"); }
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() { Log.d(TAG, "onStart"); }
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() { Log.d(TAG, "onResume"); }
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() { Log.d(TAG, "onPause"); }
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() { Log.d(TAG, "onStop"); }
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() { Log.d(TAG, "onDestroy"); }
}
Java8:
public class Java8Observer implements DefaultLifecycleObserver {
private static final String TAG = Java8Observer.class.getSimpleName();
@Override
public void onCreate(@NonNull LifecycleOwner owner) { Log.d(TAG, "onCreate"); }
@Override
public void onStart(@NonNull LifecycleOwner owner) { Log.d(TAG, "onStart"); }
@Override
public void onResume(@NonNull LifecycleOwner owner) { Log.d(TAG, "onResume"); }
@Override
public void onPause(@NonNull LifecycleOwner owner) { Log.d(TAG, "onPause"); }
@Override
public void onStop(@NonNull LifecycleOwner owner) { Log.d(TAG, "onStop"); }
@Override
public void onDestroy(@NonNull LifecycleOwner owner) { Log.d(TAG, "onDestroy"); }
}
3. 将LifecycleObserver添加到Lifecycle的观察者列表
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 直接调用getLifecycle(),添加Observer
getLifecycle().addObserver(new Java7Observer());
getLifecycle().addObserver(new Java8Observer());
}
}
三、Lifecycle中几个重要的类
- Lifecycle:定义Activity的生命周期
- LifecycleOwner:持有Lifecycle类的interface
- LifecycleObserver:观察LifecycleOwner中的interface