【发布时间】:2019-08-01 13:43:08
【问题描述】:
根据doc,DefaultLifecyclerObserver 优于 LifecycleObserver,因为后者使用注解(如果我们使用 Java 8)
如果您使用 Java 8 语言,总是更喜欢它而不是注解。
谁能解释一下为什么会这样?
【问题讨论】:
标签: android android-lifecycle androidx
根据doc,DefaultLifecyclerObserver 优于 LifecycleObserver,因为后者使用注解(如果我们使用 Java 8)
如果您使用 Java 8 语言,总是更喜欢它而不是注解。
谁能解释一下为什么会这样?
【问题讨论】:
标签: android android-lifecycle androidx
这就是为什么DefaultLifecyclerObserver 被声明为首选的主要原因。
假设您实现了LifecycleObserver 接口并使用OnLifecycleEvent 注释:
class MyLifeCycleObserver(val lifeCycle: Lifecycle) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreated() {
//...
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumed() {
//...
}
}
您可以从上面注意到,对于每个@OnLifecycleEvent 注释,我们必须传递一个Lifecycle.Event,这迫使许多开发人员总是试图回忆要传递的内容、传递的方式以及传递事件的位置。这实际上是一种开销,需要默认接口 (DefaultLifecyclerObserver)。
现在怎么样?
class MyLifeCycleObserver : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
//...
}
override fun onResume(owner: LifecycleOwner) {
//...
}
}
更干净、更好、更可靠
为什么它是 Java 8 特有的?
Java 8 允许开发人员使用所谓的Default Method 或 Defender methods 功能,允许添加新方法 一个接口,而不破坏其现有实现。
【讨论】:
more reliable?