我们正在为我们的产品构建一个公共 SDK。它是用 Kotlin 构建的,在内部我们使用协程。但是,我们想发布一个可以从 JAVA 中使用的 API,这就是为什么不能提供可暂停功能作为公共 API 的原因。
我们没关系,如果 Java 中的可用性不如 Kotlin 中那么舒服,那也是意料之中的。
因此,例如,我们正在寻找以下异步方法的返回类型:
class Sdk {
fun getPlace(): ___
}
我们考虑过的事情:
使用 RX Java 作为接口。我们不喜欢这种解决方案,Rx 相当复杂,我们希望尽可能少地添加其他依赖项。通常,我们会选择返回 Single。但是,我们不想解决的 Rx java 事情(应该完成哪个线程的工作)和 Rx 不解决我们想解决的事情(如果可能的话),例如生命周期和观察者 - 在 Android 架构组件中解决的事情.
Java 8 未来。这似乎是最合适但不可能的,因为我们需要针对较旧的 Android(至少 4.1)。
Android 架构 LiveData。返回 LiveData 似乎没问题,还有一个 observeForever() 方法可以在后台线程中使用。另一方面,api 表明它可能会重复返回多个结果。但是我们绝对希望只忽略结果或一个例外。不过,在 Kotlin 中,我们可以实现扩展函数,这将使其非常像
sdk.getPlace().await()
.自定义解决方案:返回一个简单的 Result 对象,您可以通过提供回调订阅结果
sdk.getPlace().observe(Observe { onSucccess(data: Place) {} onFailure(e: Throwable) {} })
;我们将提供等待的扩展功能。
问题:
- 我们是否错过了一些重要的方面/图书馆/可能性?
- 我们应该选择哪种解决方案以及为什么。