美文网首页
【原创】jetpack-Lifecycle

【原创】jetpack-Lifecycle

作者: seekting | 来源:发表于2020-08-16 18:37 被阅读0次

jetpack-Lifecycle

ComponentActivity 实现 LifecycleOwner接口,而AppcompatActivity继承CompomentActivity

public interface LifecycleOwner {
    @NonNull
    Lifecycle getLifecycle();
}
public class ComponentActivity extends Activity
        implements LifecycleOwner, KeyEventDispatcher.Component {
            
            
}

LifeCycle

public abstract class Lifecycle {
    public abstract void addObserver(@NonNull LifecycleObserver observer);
    public abstract void removeObserver(@NonNull LifecycleObserver observer);
    
}
public class LifecycleRegistry extends Lifecycle {
    @Override
public void addObserver(@NonNull LifecycleObserver observer) {
    //略
    while ((statefulObserver.mState.compareTo(targetState) < 0
            && mObserverMap.contains(observer))) {
        pushParentState(statefulObserver.mState);
        statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState));
        popParentState();
        // mState / subling may have been changed recalculate
        targetState = calculateTargetState(observer);
    }
    //略

}

}

如果通过按钮点击添加注册,它会从初始state 到onResumed一直调过来

生命周期怎么监听?

通过添加一个空ReportFragment

ComponentActivity.java

@Override
@SuppressWarnings("RestrictedApi")
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ReportFragment.injectIfNeededIn(this);
}

ReportFragment.java

public static void injectIfNeededIn(Activity activity) {
    // ProcessLifecycleOwner should always correctly work and some activities may not extend
    // FragmentActivity from support lib, so we use framework fragments for activities
    android.app.FragmentManager manager = activity.getFragmentManager();
    if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
        manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
        // Hopefully, we are the first to make a transaction.
        manager.executePendingTransactions();
    }
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    dispatchCreate(mProcessListener);
    dispatch(Lifecycle.Event.ON_CREATE);
}

@Override
public void onStart() {
    super.onStart();
    dispatchStart(mProcessListener);
    dispatch(Lifecycle.Event.ON_START);
}

@Override
public void onResume() {
    super.onResume();
    dispatchResume(mProcessListener);
    dispatch(Lifecycle.Event.ON_RESUME);
}

ReportFragment的分发

private void dispatch(Lifecycle.Event event) {
    Activity activity = getActivity();
    if (activity instanceof LifecycleRegistryOwner) {
        ((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
        return;
    }

    if (activity instanceof LifecycleOwner) {
        Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
        if (lifecycle instanceof LifecycleRegistry) {
            ((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
        }
    }
}

相关文章

  • 【原创】jetpack-Lifecycle

    jetpack-Lifecycle ComponentActivity 实现 LifecycleOwner接口,而...

  • Jetpack-ViewModel

    Jetpack-Lifecycle Jetpack-LiveData ViewModel ViewModel是以能...

  • Jetpack-Startup源码解析

    Startup源码解析 源码版本:Startup:1.1.0 导航:Jetpack-Lifecycle源码解析[h...

  • Jetpack-Lifecycle

    Lifecycle介绍 相关类和接口 使用 实现原理 Lifecycle-生命周期感知组件 Lifecycle是J...

  • Jetpack-Lifecycle

    痛点,Lifecycle解决了什么 MVP中的presenter感知activity或者fragment的生命周期...

  • Jetpack-Lifecycle

    Lifecycle概述 Lifecycle是生命周期感知型组件,可感知组件(如 Activity、 Fragmen...

  • JetPack-Lifecycle

    概述 Lifecycle是生命周期感知型组件,用于存储有关组件(如 Activity 或 Fragment)的生命...

  • Jetpack-Lifecycle

    lifecycle是jetpack的架构组件成员,其主要作用是对Activity/Fragment的生命周期进行监...

  • Jetpack-Lifecycle

    使用生命周期感知型组件处理生命周期 生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fra...

  • Jetpack-Lifecycle

    【AAC 系列二】深入理解架构组件的基石:LifecycleAndroid官方架构组件Lifecycle:生命周期...

网友评论

      本文标题:【原创】jetpack-Lifecycle

      本文链接:https://www.haomeiwen.com/subject/ltcxjktx.html