介绍
Lifecycle是Android Jetpack中用于管理生命周期的库。无论是MVP模式还是MVVM模式,Activity充当的都是View(视图)的角色。然而随着程序功能越来越复杂,很多模块都需要在相应的生命周期上停止或释放内存,这就使得Activity的代码不得不写大量与视图无关的代码,就如下面这个例子。通过Lifecycle就能够很好的解决这个问题。
public class MainActivity extends AppCompatActivity implements ...{
...
@Override
protected void onStop() {
super.onStop();
GPS.getInstance().stop();
TemperatureSensor.getInstance().stop();
VideoManager.getInstance().stop();
...
}
}
使用方法
在使用Lifecycle前,先把库导进来,注意Lifecycle的版本。
dependencies {
...
def lifecycle_version = "2.5.0-alpha01"
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
}
Lifecycle使用了观察者模式,被观察者是Activity或Fragment,观察者就是那些需要在生命周期上操作的模块。
我们来定义一个类,叫GPSObserver,实现DefaultLifecycleObserver接口。
public class GPSObserver implements DefaultLifecycleObserver {
}
根据实际需要重写生命周期的方法。
public class GPSObserver implements DefaultLifecycleObserver {
private final static String TAG = "GPSObserver";
@Override
public void onCreate(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onCreate");
}
@Override
public void onStart(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onStart");
}
@Override
public void onResume(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onResume");
}
@Override
public void onPause(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onPause");
}
@Override
public void onStop(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onStop");
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
Log.d(TAG, "GPS onDestroy");
}
}
最后把观察者添加至LifecycleOwner即可。Activity已经实现了LifecycleOwner接口,所以直接通过getLifecycle方法获取LifecycleOwner就行了。
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLifecycle().addObserver(new GPSObserver());
}
}
最后测试一下结果,GPS模块生命周期方法随Activity的状态变化而调用。
2022-02-06 14:19:26.524 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onCreate
2022-02-06 14:19:26.539 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStart
2022-02-06 14:19:26.540 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onResume
2022-02-06 14:20:41.386 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onPause
2022-02-06 14:20:41.397 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStop
2022-02-06 14:20:45.246 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStart
2022-02-06 14:20:45.247 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onResume
2022-02-06 14:20:46.673 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onPause
2022-02-06 14:20:47.415 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onStop
2022-02-06 14:20:47.418 2918-2918/com.pyjtlk.lifecycle D/GPSObserver: GPS onDestroy
当然,也可以让GPSObserver实现LifecycleEventObserver接口,这样就可以监听Activity的生命周期状态了。
public class GPSObserver implements LifecycleEventObserver {
private final static String TAG = "GPSObserver";
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
switch (event.getTargetState()){
case INITIALIZED:
Log.d(TAG, "INITIALIZED");
break;
case CREATED:
Log.d(TAG, "CREATED");
break;
case STARTED:
Log.d(TAG, "STARTED");
break;
case RESUMED:
Log.d(TAG, "RESUMED");
break;
case DESTROYED:
Log.d(TAG, "DESTROYED");
break;
}
}
}
那么DefaultLifecycleObserver和LifecycleEventObserver有什么区别吗?DefaultLifecycleObserver监听的是生命周期的回调方法,LifecycleEventObserver监听的是生命周期的状态,如下图所示。
最后
本篇文章讲解了如何通过Lifecycle来操作模块的生命周期。
参考文章
《Android开发者文档》
|