JoJo的个人博客

记录精彩的程序人生

目录
Jetpack系列之Lifecycles
/    

Jetpack系列之Lifecycles

概述

对于Lifecycle,官网这样介绍,使用生命周期感知型组件处理生命周期。我的理解是使用Lifecycle可以使任意一个组件具有生命周期,这个生命周期可以追随activityfragment的生命周期(或者实现了LifecycleOwner的类)

我使用并封装了JetPack系列组件的用法,java版参考代码JetPackDemo

Lifecycle基础用法

通过LifecycleOwnerLifecycleObserver 实现

LifecycleOwner是单一方法接口,表示类需要实现getLifecycle()方法返回 Lifecycle对象,Lifecycle就是一个被观察者,通过addObserver()方法来订阅LifecycleObserver观察者

ActivityFragment中已经内置实现了LifecycleOwner接口,因此可以直接订阅LifecycleObserver观察者

示例代码

public class MainActivity extends AppCompatActivity {

    public class MyObserver implements LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void connectListener() {
          ...
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        public void disconnectListener() {
          ...
        }
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getLifecycle().addObserver(new MyObserver());
    }
}

实现自定义 LifecycleOwner

如果您有一个自定义类并希望使其成为 LifecycleOwner,您可以使用 LifecycleRegistry 类,但需要将事件转发到该类,示例代码

    public class MyActivity extends Activity implements LifecycleOwner {
        private LifecycleRegistry lifecycleRegistry;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            lifecycleRegistry = new LifecycleRegistry(this);
            lifecycleRegistry.markState(Lifecycle.State.CREATED);
        }

        @Override
        public void onStart() {
            super.onStart();
            lifecycleRegistry.markState(Lifecycle.State.STARTED);
        }

        @NonNull
        @Override
        public Lifecycle getLifecycle() {
            return lifecycleRegistry;
        }
        
       @Override
      protected void onDestroy() {
          super.onDestroy();
          lifecycleRegistry.markState(Lifecycle.State.DESTROYED);
      }      
    }
    

参考文档

Android开发者文档-处理生命周期


标题:Jetpack系列之Lifecycles
作者:SunnySky
地址:https://www.tianyang.pub/articles/2020/07/03/1593767918613.html

评论