Таким образом, я получил свой BillingClient в отдельном одноэлементном классе, чтобы использовать его во всем приложении, что хорошо работает.
public class BillingClientHelper implements PurchasesUpdatedListener, BillingClientStateListener {...}
Поскольку для запуска фактического процесса выставления счетов вам требуется родительское действие, я получил его, передав объект деятельности:
private void launchActualBillingFlow(Activity activity, SkuDetails skuDetails) {
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(activity, flowParams);
}
, который также работает хорошо. Но теперь наступает момент, когда после совершения покупки я хотел бы обновить базовую родительскую активность, чтобы представить новое состояние пользователю. Но я больше не могу ссылаться на это действие, поскольку фактический результат выставления счета происходит асинхронно в onPurchasesUpdated
. Поэтому у меня нет ручки для вызова чего-то вроде activity.recreate()
.
Как мне лучше всего это сделать? С некоторым интерфейсом обратного вызова в моей деятельности, который реализует биллинговый класс, а затем вызывает onPurchasesUpdated
? Кажется, это не круто: /
Или есть какой-то способ сохранить кратковременную ссылку на активность, которая не приводит к утечке памяти?