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。