美文网首页
jectpack之Lifecycle入门

jectpack之Lifecycle入门

作者: 写Android的lc君 | 来源:发表于2020-02-04 18:07 被阅读0次

    lifecycle是什么

    lifecycle是一个生命周期感知组件 它可以感知Fragment/Activity的生命周期 并且会防止内存泄漏,

    为什么要用

    lifecycle出来之前

    @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            presenter.register();
            locationManager.oncreate(this);
            ...
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            presenter.unregister();
            locationManager.onDestroy();
            ...
        }
    

    这样在实际生产环境中,代码会越来越臃肿,需要在每个的Activity中 oncreate onDestroy中调用相应的方法,代码不易维护。

    Lifecycle可以感知组件的生命周期,并对注册组件的接收者来分发生命周期状态

    Lifecycle的用法

    1. 构建Observer

    //自定义类实现LifecycleObserver接口
    public class SampleObserver implements LifecycleObserver {
      /**
         * 在需要调用的方法上使用OnLifecycleEvent注解来告诉Lifecycle当前方法的事件类型
         * Lifecycle支持的事件类型后续会以表格写出
         */
        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        public void onCreate() {
            log("onCreate");
            getCurentState();
        }
    }
    

    2. 注册Observer

    //在Activity/Fragment中注册observer 在组件生命周期发生变化时会回调相应的函数
    getLifecycle().addObserver(new SampleObserver();
    

    Lifecycle支持的生命周期类型

    Activity/Fragment的生命周期 Lifecycle的Event事件 Lifecycle的State
    onCreate()/onActivityCreated() ON_CREATE CREATED
    onStart() ON_START STARTED
    onResume() ON_RESUME RESUMED
    onPause() ON_PAUSE STARTED
    onStop() ON_STOP CREATED
    onDestroy() ON_DESTROY DESTROYED
    • Lifecycle.STATE.INITIALIZED是尚未收到组件生命周期回调时的初始状态
    • Lifecycle.Event.ON_ANY 只要组件生命周期发生变化,就会回调
    • Lifecycle的Event事件属于被动回调 State状态属于主动获取
    • 由表格可以看出只有State在RESUME的时候组件才可以与用户进行交互
    • Event事件的回调和组件是属于串行 所以在Event事件里面不建议做过多的耗时操作

    Lifecycle使用扩展

    1.使用注解处理器提高性能

    Lifecycle 已经默认包含在AndroidX的库中

    lifecycle默认是使用反射来调用Observer的方法的,这样会对性能造成影响,导致程序变慢。

    可以导入Lifecycle的注解处理器来提高性能 在编译期间生成Adapter类来避免反射

     annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
    

    编译工程后会根据工程里面包含的LifecycleObserver 生成类名_LifeCycleAdapter的辅助类

    lifecycle是如何处理反射和适配器的后面会在源码分析中给出

    2.LifecycleObserver使用扩展

    a.LifecycleEventObserver

    包含事件发送的Observer多了一个onStateChanged函数

    相关文章

      网友评论

          本文标题:jectpack之Lifecycle入门

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