更深更深的含义是 DIM 背后的真正动机是 Xamarin/Android 互操作。
Android 和 Java 使用 DIM 进行接口版本控制。一个 Android 应用程序必须在数十个 Android SDK 级别上运行,并且 DIM 用于为为旧版本的 SDK 构建的应用程序提供默认实现。如果 Xamarin 应用程序可以直接使用或覆盖这些实现,它将真正受益。
例如LifeCycleObserver接口用于通知应用程序特定的生命周期事件。应用程序可以实现这一点以获得事件通知。DefaultLifeCycleObserver接口使用空的默认方法来提供默认实现,因此应用程序不必处理所有状态。可以添加新状态并且应用程序根本不必更改:
/**
* Callback interface for listening to {@link LifecycleOwner} state changes.
* <p>
* If you use Java 8 language, <b>always</b> prefer it over annotations.
*/
@SuppressWarnings("unused")
public interface DefaultLifecycleObserver extends FullLifecycleObserver {
/**
* Notifies that {@code ON_CREATE} event occurred.
* <p>
* This method will be called after the {@link LifecycleOwner}'s {@code onCreate}
* method returns.
*
* @param owner the component, whose state was changed
*/
@Override
default void onCreate(@NonNull LifecycleOwner owner) {
}
Android-DisposeBag会覆盖此默认实现以仅在应用程序暂停或关闭时处理 ReactiveJava 流:
class DisposeBag @JvmOverloads constructor(owner: LifecycleOwner,
private val event: Lifecycle.Event = DisposeBagPlugins.defaultLifecycleDisposeEvent)
: Disposable, DisposableContainer, DefaultLifecycleObserver {
...
override fun onPause(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_PAUSE) dispose()
}
override fun onStop(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_STOP) dispose()
}
override fun onDestroy(owner: LifecycleOwner) {
if (event == Lifecycle.Event.ON_DESTROY) dispose()
}
如果Azure SDK 开始使用 DIM ,我不会感到惊讶。modern cloud environments
这可以解释为什么 Scott Hunter在 .NET Conf 主题演讲中一直在谈论DIM。