jectpack之Lifecycle入门

2020-02-04  本文已影响0人  写Android的lc君

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使用扩展

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

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

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

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

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

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

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

2.LifecycleObserver使用扩展

a.LifecycleEventObserver

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

上一篇下一篇

猜你喜欢

热点阅读