Android での非同期操作の順次実行は、少なくとも複雑です。のように 2 つの演算子間のセミコロンであったシーケンシャル実行ではdo_this(); do_that()
、チェーン リスナーが必要になります。
奇妙なことに、順次操作を連鎖させる必要性を示す例は、たいてい不自然に見えますが、今日、私は完全に合理的な例を見つけました。
Android にはアプリ内課金があり、アプリケーションは複数のいわゆるアプリ内製品 (SKU = Stock Keeping Unit とも呼ばれます) をサポートできます。これにより、たとえば、ユーザーは必要な機能のみを購入 (支払い) することができます。彼女は必要です (そして悲しいかな、ひげを生やした男性がビットマップを 10 代の若者に販売できるようにすることもできます)。
アプリ内商品情報を取得する機能は、
public void queryInventoryAsync(final boolean querySkuDetails,
final List<String> moreSkus,
final QueryInventoryFinishedListener listener)
また、リストには最大 20 項目を含める必要があるという制限があります。(はい、あります。) この 20 個のうち、アプリ内製品として登録されているのはごくわずかです。
たとえば、100 個のアプリ内製品に関する情報を取得したいと考えています。最初に考えられるのは、この関数をループで呼び出すことですが、いつでも許可される市場との非同期操作は 1 つだけです。
もちろん、「再利用しないで、ソースを変更してください」と言う人もいますし、それに対して非常に良い議論を提供することさえできます。これはおそらく私が最終的に行うことですが、洗練された再利用ソリューションを見たいので、これを書きます。
一般的なケースで複数の非同期操作を連鎖させるエレガントな (=面倒ではない) パターンまたはトリックはありますか?
(リスナーを使用する非同期操作は既存のコードであることを強調します。)
UPD これは、JavaScript の世界で「コールバック地獄」( http://callbackhell.com/ ) と呼ばれるものです。