Android Jetpack之LifeCycle

LifeCycle简介

LifeCycle综述
LifeCycle是Google Jetpack组件中的一员,使用LifeCycle完美实现生命周期的管理,如Fragment,Activity等
LifeCycle相关的类
  1. Lifecycle.java类 : 抽象类,一个持有Android生命周期状态的类。
  2. LifecycleOwner.java接口:接口,实现该接口的类拥有了生命周期的状态,getLifecycle()可以获得Lifecycle类,使用该Lifecycle类可以实现生命周期的管理。
  3. LifecycleObserver.java:接口,实现该接口,可以感知LifeCycle的生命周期,通过Lifecycle#addObserver方法实现添加观察者实现感知生命周期。

LifeCycle的使用

简单使用
因为Fragment、AppCompantActivity都已经实现了LifecycleOwner接口,所以使用起来比较简单,如下
  1. 定义观察者MyObserver,代码如下,实现LifecycleObserver接口,或者LifecycleEventObserver:
    class MyObserver:LifecycleObserver{
    
       @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        fun resumeEvent() {
           Log.d(Common.TAG,"createEvent")
       }
       @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun pauseEvent() {
           Log.d(Common.TAG,"pauseEvent")
       }
   }

或者:

class MyObserver2: LifecycleEventObserver {

  override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
      Log.d(Common.TAG,"eventName->${event.name}")
  }

}
  1. 在Activity中注册观察者,代码如下:
    class MainActivity : AppCompatActivity() {
   
       override fun onCreate(savedInstanceState: Bundle?) {
           super.onCreate(savedInstanceState)
           
           lifecycle.addObserver(MyObserver())
           lifecycle.addObserver(MyObserver2())
       }
   }

运行日志如下:
进入Activity 1 为MyObserver的日志,2为MyObserver2的日志
日志1
退出Activity 1 为MyObserver的日志,2为MyObserver2的日志:
日志2

使用Activity,自主实现LifecycleOwner接口
  1. 继承Activity,实现接口LifeCycleOwner
  2. 手动派发事件
  3. 添加监听器
    代码如下:
	class TestActivity :Activity(),LifecycleOwner{

    private  var lifecycleRegistry:LifecycleRegistry = LifecycleRegistry(this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
        lifecycleRegistry.addObserver(MyObserver())
        lifecycleRegistry.addObserver(MyObserver2())
    }

    override fun onStart() {
        super.onStart()
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
    }

    override fun onResume() {
        super.onResume()
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
    }

    override fun onPause() {
        super.onPause()
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    }


    override fun onDestroy() {
        super.onDestroy()
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    }

    override fun getLifecycle(): Lifecycle {
       return lifecycleRegistry
    }
}

运行日志如下:
日志3
其实这块的手动派发是仿照系统的源码中的FragmentActivity写的 部分源码如下:

    @Override
   protected void onStart() {
       super.onStart();

   		...
   		//派发在此处
       mFragmentLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
       mFragments.dispatchStart();
   }

附言

简单使用中的MyObserver也可继承DefaultLifecycleObserver类(java8中推荐使用这个),重写相关的生命周期对应的方法实现操作

注意:只引入:'implementation 'androidx.appcompat:appcompat:1.1.0’时候**
DefaultLifecycleObserver类找不到,注意引入依赖如下:

	implementation 'android.arch.lifecycle:common-java8:2.1.0'
编译报错时候注意加入配置:
	android {
		...
		// java8编译java代码
		  compileOptions {
       		sourceCompatibility JavaVersion.VERSION_1_8
      		   targetCompatibility JavaVersion.VERSION_1_8
  		 }
   //java8 编译kotlin代码
  	 kotlinOptions{
      	 jvmTarget = '1.8'
  	 }
  }

附LifeCycle状态切换图如下:

状态切换图
1、向下为创建的过程,向上为销毁的过程。
2、onStart(CREATED)表示在onStart方法中的状态为CREATED,其余类似。
3、在OnResume和onPause之间为RESUMED状态,比如点击按钮的时候等等。

源码

源码链接:源码

总结

关于Jetpack中的LifeCycle就介绍到此处。
共勉:其实很多的代码都能在源码中找到相关的影子,平时多看看源码对于我们的提示是非常有帮助的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值