Android终阶之Lifecycle、LiveData应用

Jetpack的组件,对于Android的开发和管理具有很大的帮助,介绍一下Lifecycle、LiveData。

Lifecycle

它可以对fragment和Activity的生命周期进行管理。也就是横向抽象,对于生命周期中相同的操作,使用一个类来进行统一管理多个。

  • 依赖导入
compile group: 'androidx.lifecycle', name: 'lifecycle-extensions', version: '2.2.0'
  • 使用
/**
 * 主要的Activity只有这一个 @_A_@!!!
 */
class MainActivity :AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_view)
        lifecycle.addObserver(MyObserver())
        //输出:Start 
        //     Resume
    }
}

private class MyObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume(){
        println("Resume")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause(){
        println("Pause")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart(){
        println("Start")
    }
}
LiveData

说明:我的理解,将需要被注册的数放在一个可以共享的地方,就可以设置多个订阅者了,比如一个单例。

  • 普通使用
class MainActivity :AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_view)
//        lifecycle.addObserver(MyObserver())
        val mutableLiveData:MutableLiveData<String> = MutableLiveData()
        mutableLiveData.observe(this, object :Observer<String>{
            override fun onChanged(t: String?) {
                println("主角爱着$t${t}是主角老婆!")
            }
        })
        mutableLiveData.postValue("岛本")
        //输出:主角爱着岛本,岛本是主角老婆!
    }
}
  • 使用Transformations.map方法可以在对象分发给观察者之前对其中存储的值进行更改。
class MainActivity :AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_view)
//        lifecycle.addObserver(MyObserver())
        val mutableLiveData:MutableLiveData<String> = MutableLiveData()
        val transformedLiveData:LiveData<String>  = Transformations.map(mutableLiveData, Function {
            "${it}直子"
        })
        transformedLiveData.observe(this, object :Observer<String>{
            override fun onChanged(t: String?) {
                println("主角爱着$t${t}是主角老婆!")
            }
        })
        mutableLiveData.postValue("岛本")
        //输出:主角爱着岛本直子,岛本直子是主角老婆!
    }
}
  • Transformations.switchMap可以动态监听一个数据的变化,并根据需要随时切换监听。就是加了一个Boolean的判断。
  • 还可以进行多个数据源的合并。使用MediatorLiveData。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值