Android Jetpack-Lifecycle

Android标准化项目架构:MVVM+Jectpack

助力研发,本篇将对Jectpack 中的Lifecycle进行简要分析

1.什么是Lifecycle

Lifecycle是Jatpack里的一个组件,可以监听Activity、Fragment声明周期的各种变化。

Lifecycle介绍:

  • 可以有效的避免内存泄漏和解决Android声明周期的不方便监听的问题。
  • 是一个表示Android声明周期以及状态的对象。
  • LivecycleOwner 用于连接有声明周期的对象,如Activity、fragment。
  • LivecycleObserveder 用于观察LivecycleOwner,LivecycleOwner是被观察者。
  • Lifecycle原理是通过使用观察者监听被观察者的声明周期变化实现的。

使用这个可以控制在界面可见的时候才会刷新页面,页面不可见停止页面刷新。

2.通过继承LifecycleObserver实现声明周期感知

class MSObserverListener : LifecycleObserver {

     companion object{
          const val TAG:String="MSLocationListener";
     }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun create() = Log.d(TAG, "create----")

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun start() = Log.d(TAG, "start---- ")

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun resume() = Log.d(TAG, "resume---- ")

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun pause() = Log.d(TAG, "pause---- ")

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun stop() = Log.d(TAG, "stop----")

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun destroy() = Log.d(TAG, "destroy---- ")

}

class MainActivity : AppCompatActivity() {

    companion object{
        const val TAG="MainActivity";
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
            
        lifecycle.addObserver(MSObserverListener())
            
    }
}

通过addObserver 建立观察订阅关系。

3.通过继承DefaultLifecycleObserver

class MSObserver: DefaultLifecycleObserver{

    companion object{
        const val TAG:String="MSObserver";
    }

    override fun onCreate(owner: LifecycleOwner) {
        super.onCreate(owner)
        Log.d(TAG, "create---- 正在启动系统定位服务中...")
    }

    override fun onStart(owner: LifecycleOwner) {
        super.onStart(owner)
        Log.d(TAG, "start----")
    }

    override fun onResume(owner: LifecycleOwner) {
        super.onResume(owner)
        Log.d(TAG, "resume---- ")
    }

    override fun onPause(owner: LifecycleOwner) {
        super.onPause(owner)
        Log.d(TAG, "pause----")
    }

    override fun onStop(owner: LifecycleOwner) {
        super.onStop(owner)
        Log.d(TAG, "stop---- ")
    }

    override fun onDestroy(owner: LifecycleOwner) {
        super.onDestroy(owner)
        Log.d(TAG, "destroy----")
    }
}

class MainActivity : AppCompatActivity() {

    companion object{
        const val TAG="MainActivity";
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        lifecycle.addObserver(MSObserver())
    }
}
  • 通过实现DefaultLifecycleObserver 来实现,可以拿到 Activity Fragment 所有环境
  • 可以在观察者里边执行一些跟上下文相关的代码逻辑,比如弹出Toast等

这个方式更常用一些。

4.通过内联函数实现

class MainActivity : AppCompatActivity() {

    companion object{
        const val TAG="MainActivity";
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
       lifecycle.addObserver(MSInnerObserver())

    }

    /**
     * 通过内联函数实现,感知声明周期变化
     */
    inner class MSInnerObserver:LifecycleObserver{
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        fun onResume(){
           Log.d(TAG,"inner onResume-----")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun onPause(){
            Log.d(TAG,"inner onPause-----")
        }
    }
}

通过内联函数实现声明周期的感知,可以实现代码逻辑内聚的效果。

一般在实际项目中,创建订阅关系会在BaseActivity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值