带着问题去看下 Lifecycle 源码

本文深入探讨了Android的Lifecycle组件,讲解了其基本使用、如何自定义LifecycleOwner,以及核心实现原理。重点分析了LifecycleOwner与Activity的绑定、LifecycleRegistry如何回调通知、@OnLifecycleEvent注解的工作方式,同时揭示了Event和State之间的关系。
摘要由CSDN通过智能技术生成

在写完上篇 带着问题去看下ViewModel源码 之后,虽然将 ViewModel 都交代清楚了,不过最基础核心的 Lifecycle 组件 部分并没有进行说明,因此这篇就专门说一下 Lifecycle 组件,下面开始正文

Lifecycle组件 的使用

使用 Lifecycle 组件的话,我们可以相对轻松去响应指定组件( 通常都是 Activity )的生命周期变化,因此利用 Lifecycle 组件,我们可以避免在 Activity 等组件 的生命周期回调中写大量管理组件的代码,进一步精简了我们的项目代码

这里简单说一下 Lifecycle 组件Activity 中的基本用法:

public class MainActivity extends AppCompatActivity {
   

    private static final String TAG = "Lifecycle";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle_test);
        //这里进行注册,进行生命周期
        getLifecycle().addObserver(new MyObserver());
    }
   	
    @Override
    protected void onResume() {
   
        super.onResume();
        Log.w(TAG, "onResume");
    }
  
    @Override
    protected void onDestroy() {
   
        super.onDestroy();
        Log.w(TAG, "onDestroy");
    }
  
     private class MyObserver implements LifecycleObserver {
   

      @OnLifecycleEvent(value = Lifecycle.Event.ON_RESUME)
      public void resume(){
   
          Log.e(TAG, "resume");
      }

      @OnLifecycleEvent(value = Lifecycle.Event.ON_DESTROY)
      public void destroy(){
   
          Log.e(TAG, "destroy");
      }
  }
}

使用起来就这么简单,只要实现了 LifecycleObserver 这个接口,然后使用 注解标记要观察的组件生命周期,只要注册就可以完成生命周期的监控了,可以从日志来验证这一点:

这时候问题就来了,Lifecycle 组件 是怎么做到这一点的?先别急,我们先来看下如果要自己实现一个 LifecycleOwner,应该要怎么做

自己实现一个 LifecycleOwner

目前我们知道的,我们可以在 Activity 里面注册监控生命周期,那么如果是其他组件呢?假设现在我们有一个 Service,我们希望可以监听到这个 Service 的生命周期,在 Service 启动时加载某些资源,在 Service 结束时去释放某些资源:

那么,就需要我们自己来实现一个带有 LifecyclerOwnerService

public class MsgService extends Service implements LifecycleOwner {
   

    private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

    @Override
    public void onCreate() {
   
        super.onCreate();
        //发出create事件
        mLifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
   
        return mLifecycleRegistry;
    }

    @Override
    public void onDestroy() {
   
        super.onDestroy();
         //发出destroy事件
        mLifecycleRegistry.setCurrentState(Lifecycle.State.DESTROYED);
    }

    /**
     * 返回一个Binder对象
     */
    @Override
    public IBinder onBind(Intent intent) {
   
        return new MsgBinder();
    }

    public class MsgBinder extends Binder {
   
        /**
         * 获取当前Service的实例
         */
        public MsgService getService() {
   
            return MsgService.this;
        }
    }
}

然后下一步,就在一个 Activity 里面启动这个 Service ,并绑定 LifecycleObserver 去监听 Service 的生命周期变化:

public class MainActivity extends AppCompatActivity implements ServiceConnection {
   

    private static final String TAG = "Lifecycle"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值