美文网首页
【原创】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

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