正文
extends
AppCompatActivity
{
private
MyPresenter myPresenter;
@Override
protected
void
onCreate
(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myPresenter =
new
MyPresenter();
}
@Override
protected
void
onResume
()
{
super
.onResume();
myPresenter.onResume();
}
@Override
protected
void
onPause
()
{
super
.onPause();
myPresenter.onPause();
}
}
class
MyPresenter
{
void
onResume
()
{
...
}
void
onPause
()
{
...
}
}
复制代码
这两个例子的写法已经很普遍了,实现起来也不难,但实际开发中,可能会有多个组件在Activity的生命周期中进行回调,这样Activity的生命周期的方法中可能就需要放大量的代码,这就使得它们难以维护。
还有一个问题是,如果我们在组件中做了耗时操作(比如在onStart方法),这种写法就无法保证组件在Activity或者Fragment停止之前完成启动。
因此我们需要一个能管理Activity和Fragment的生命周期的库,这个库就是Lifecycle。
2.如何使用Lifecycle
分别来介绍下依赖Lifecycle库和Lifecycle基本用法。
2.1 依赖Lifecycle库
官网给出的依赖代码如下所示:
dependencies {
def lifecycle_version = "2.0.0"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"
testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
}
复制代码
官网用的是AndroidX,因为使用AndroidX,可能会产生一些迁移的问题,这里的举例就不使用AndroidX,而是使用lifecycleandroid.arch.lifecycle库,如下所示。
dependencies {
def lifecycle_version = "1.1.1"
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version"
implementation "android.arch.lifecycle:livedata:$lifecycle_version"