Android lifecyle 源码解剖,android应用开发

本文详细剖析了Android中CustomLifecycleActivity的源码实现,解释了如何实现LifecycleOwner接口并管理Activity的生命周期状态。通过覆盖onCreate、onStart、onResume和onDestroy方法,结合LifecycleRegistry来标记状态变化。同时,文章探讨了addObserver方法的工作原理,包括状态初始化、判断重复添加、计算目标状态等步骤,以及在不同状态下如何触发Observer的onStateChanged方法。最后,提到了从26.1.0版开始的SupportActivity如何利用Lifecycle进行自动管理。
摘要由CSDN通过智能技术生成

public class CustomLifecycleActivity extends FragmentActivity implements LifecycleOwner {

private LifecycleRegistry mLifecycleRegistry;

private static final String TAG = “CustomLifecycleActivity”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_custom_lifecycle);

mLifecycleRegistry = new LifecycleRegistry(this);

mLifecycleRegistry.markState(Lifecycle.State.CREATED);

getLifecycle().addObserver(new GenericLifecycleObserver() {

@Override

public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {

Log.d(TAG, "onStateChanged: event = " + event);

}

});

}

@Override

protected void onStart() {

super.onStart();

mLifecycleRegistry.markState(Lifecycle.State.STARTED);

}

@Override

protected void onResume() {

super.onResume();

mLifecycleRegistry.markState(Lifecycle.State.RESUMED);

}

@Override

protected void onDestroy() {

super.onDestroy();

mLifecycleRegistry.markState(Lifecycle.State.DESTROYED);

}

@NonNull

@Override

public Lifecycle getLifecycle() {

return mLifecycleRegistry;

}

}

  1. 第一步:先实现 LifecycleOwner 接口,并返回 mLifecycleRegistry

  2. 第二步:在 Activity 生命周期变化的时候,调用 mLifecycleRegistry.markState() 方法标记相应的状态

  3. 如果想添加 observer,调用 addObserver 方法添加观察者,这样会在 activity 生命周期变化的时候,回调 observer 的 onchange 方法。

我们先来看一下 getLifecycle() 方法, getLifecycle() 它返回的是一个 Lifecycle 的实例,sdk 中默认的实现类为 LifecycleRegistry。

接下来,我们一起来看一下它的 observer 方法。

public void addObserver(@NonNull LifecycleObserver observer) {

// 判断是否是 DESTROYED,如果是将初始状态置为 DESTROYED,否则为 INITIALIZED

State initialState = mState == DESTROYED ? DESTROYED : INITIALIZED;

// ObserverWithState 包装

ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);

// 将 observer 作为key,在缓存的 mObserverMap 中查找是否存在

ObserverWithState previous = mObserverMap.putIfAbsent(observer, statefulObserver);

// 存在,直接返回回去,证明该 observer 已经添加过了。否则,证明还没有添加过该 observer

if (previous != null) {

return;

}

LifecycleOwner lifecycleOwner = mLifecycleOwner.get();

if (lifecycleOwner == null) {

// it is null we should be destroyed. Fallback quickly

return;

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值