0

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/ ) と呼ばれるものです。

4

3 に答える 3

0

前のメソッドの中で次AsyncTaskのメソッドを呼び出すことで、s を次々にシーケンスできます。execute()AsyncTaskonPostExecute()

于 2013-11-12T13:09:06.443 に答える