Lifecycle使用和原理

Posted by alonealice on 2020-05-22

Lifecycle 是官方提供的架构组件之一,是具有生命周期感知能力的组件。也就是说,我们能在 Activity 或者 Fragment 的生命周期发生变化的时候得到通知

依赖

1
2
implementation "android.arch.lifecycle:livedata:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

使用

如果我们Activity继承自support library在26.1.0和之后包中的AppCompatActivity,那么就无需继承,否则Activity需要实现LifecycleOwner接口。

创建一个类,让它实现 LifecycleObserver 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Life implements LifecycleObserver {

private static final String TAG="life_tag";

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void a(){
Log.d(TAG, "Life: -------- onpause" );
}

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void b(){
Log.d(TAG, "Life: -------- onResume" );
}
}

同时在对应的方法中添加注解,并设置对应的生命周期阶段

绑定对应的对象:

1
getLifecycle().addObserver(new Life());

在activity的对应的生命周期时,就会调用对应的绑定的方法。

如果activity未实现LifecycleOwner接口,则需要自己实现该接口,并在对应的生命周期方法中调用对应的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class LifeCycleActivity extends Activity implements LifecycleOwner {

private LifecycleRegistry mLifecycleRegistry;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLifecycleRegistry = new LifecycleRegistry(this);
getLifecycle().addObserver(new MyObLifeserver());
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}

@Override
protected void onResume() {
super.onResume();
mLifecycleRegistry.markState(Lifecycle.State.RESUMED);
}

@Override
protected void onPause() {
super.onPause();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}

@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}