欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jetpack LifeCycle

程序员文章站 2022-06-07 18:23:18
...

1.LifeCycle的诞生
①.解耦,创建可感知的生命周期组件。
②.降低内存泄漏发生的可能性。

2.使用LifeCycle解耦页面与组件

    2.1 案例分析
    假设有这样一个需求,当用户打开界面即获取定位位置,通常写法是在Activity中各个声明周期进行相应的地理位置操作。使地理位置这个操作和Activity中的生命周期密不可分,耦合严重。

    2.2 LifeCycle的原理
    Jetpack提供两个类:LifecycleOwner(被观察者)和LifecycleObserver(观察者)。即通过观察者模式实现对生命周期的监听。
观察者android源码中已经实现,如下:

public class ComponentActivity extends Activity implements
        LifecycleOwner,
        KeyEventDispatcher.Component {

  private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
}

    2.3 解决方案

    自定义观察者,并将与Activity生命周期相关的操作放到自定义的观察者里面,如下:

class MyLifeCycleObserver : LifecycleObserver{

    constructor(){
        //初始化操作
    }

    /**
     * 开始定位
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private fun onStartGetLocation() {

    }

    /**
     * 结束定位
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private fun onStopGetLocation(){

    }

}

MainActivity中的实现如下:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycle.addObserver(MyLifeCycleObserver())
    }
}

3. 其他支持LifeCycle的组件

除了Activity,Fragment也是支持的,源码如下:

public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener, LifecycleOwner,
        ViewModelStoreOwner, SavedStateRegistryOwner {
    @Nullable FragmentViewLifecycleOwner mViewLifecycleOwner;
    @Override
    @NonNull
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
}

Service支持LifeCycle,Application支持LifeCycle,需要用ProcessLifeCycleOwner来监听,可以监听程序的整个生命周期

4. Activity中生命周期解析

Jetpack LifeCycle

相关标签: android基础知识