当社の製品用のパブリックSDKを構築しています。これはKotlinで構築され、内部的にはコルーチンを使用しています。しかし、JAVA形式で使用できるAPIを公開したいので、公開APIとして一時停止可能な機能を提供できません。独自のSDKのアーキテクチャ - Kotlinの非同期メソッドAPI
Javaの使い勝手がKotlinよりも快適でない場合は、大丈夫です。かなり期待しています。
ので、例えば、私たちは以下の非同期メソッドの戻り値の型を探しています:
をインターフェースとしてRX Javaの使用:私たちが考えた
class Sdk { fun getPlace(): ___ }
物事。私たちはこの解決策が嫌いです、Rxは非常に複雑で、できるだけ他の依存関係を追加したいと思っています。一般的に、私たちはSingleを返して行くだろう。しかし、Rxは私たちが解決したくないもの(スレッドは作業が終わっているはずです)とRxは解決したいことを(できれば)解決しません。ライフサイクル&オブザーバー - Androidアーキテクチャのコンポーネントで解決されるもの。
Java 8 Future。これは最も適切だが、古いAndroids(少なくとも4.1)を対象にする必要があるため不可能であると思われる。
AndroidアーキテクチャLiveData。 LiveDataを返すことはOKですが、observeForever()メソッドもあり、バックグラウンドスレッドで使用できるようになります。一方、apiは、繰り返して複数の結果を返す可能性があることを示唆しています。しかし、私たちは間違いなく結果または1つの例外のみを省略したい。しかし、Kotlinでは、拡張機能を実装して、
sdk.getPlace().await()
として利用できるようにしています。カスタムソリューション:単純なResultオブジェクトを返します。コールバックを提供することで結果をサブクレイブすることができます。
sdk.getPlace().observe(Observe { onSucccess(data: Place) {} onFailure(e: Throwable) {} })
;待つための拡張機能を提供します。
質問:
我々はいくつかの重要な側面/ライブラリ/可能性を欠場- ?
- 私たちはどのソリューションを選択すべきか、その理由は何か。
[google/guava](https://github.com/google/guava)をご覧ください。それはいくつかのJava機能のポートを元のJavaバージョンに戻します。 – Joshua
Googleサービスの「タスク」についてはどうですか? Kotlinではラムダを使うこともできますし、単に 'task.getResult()' https://developers.google.com/android/reference/com/google/android/gms/tasks/Task –