目录
- The problem I am solving
- Solution
- Lifecycle observer
- LifecycleOwner
- Making it work
- Removing the observer
我在Google Playstore上的应用程序
github代码
我试图解决的问题
- 因此,当我将订阅集成到我的Android应用中时,在谈论Fetching Purchases时,文档的特定行很突出:
To handle these situations, be sure that your app calls BillingClient.queryPurchasesAsync() in your onResume() method to ensure that all purchases are successfully processed as described in processing purchases.
- 提出了
how and where do I call the onResume() method
的问题。
解决方案
- 我发现处理此操作的两种主要方法是:
1)副作用:使用DisposableEffect在您的撰写代码中调用onResume()
2)生命周期观察者:创建一个DefaultLifecycleObserver以在我的ViewModel内部调用onResume()
(我选择了此版本)
2)生命周期观察者
-
现在,当我们说要创建一个
Lifecycle observer
时,我们说我们正在创建一个类,该类将观察某个组件的Android生命周期(例如片段的活动)。生命周期观察者有两个部分,1) the lifecycle observer
和2) the lifecycle owner
。 -
为了创建生命周期观察者,我们需要让类实现DefaultLifecycleObserver接口,例如:
class BillingViewModel(): ViewModel(),DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
// do whatever you want
refreshPurchases()
}
}
-
通过实现
DefaultLifecycleObserver
,我们已经使视图模型访问了LifecycleOwner's
方法,例如onResume()
和Android库现在将识别BillingViewModel
的实例为生命周期观察者。 -
,但是现在我们需要将生命周期观察者附加到生命周期
Lifecycleowner
-
如果实现LifecycleOwner接口,则将其视为生命周期。在我的代码中,我使用的是片段,根据文档Fragment实现了生命周期的界面。
-
所以现在我们有一个生命周期的人(片段)和一个LifeCycleObserver(BillingViewModel)我们需要附加它们。
使它起作用
- 所以我的片段里看起来像这样:
class SubscriptionFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val billingViewModel:BillingViewModel by activityViewModels()
// THIS IS WHERE WE ARE CONNECTING THE TWO
lifecycle.addObserver(billingViewModel)
}
- 将观察者添加到所有者的代码为
lifecycle.addObserver(billingViewModel)
。现在,这使我们的ViewModel访问了片段的生命周期方法
删除观察者
An observer added with a Lifecycle will be automatically removed if the corresponding Lifecycle moves to DESTROYED state.
- 所以我决定不手动删除观察者,然后让Android系统处理它。
结论
- 感谢您抽出宝贵的时间阅读我的博客文章。如果您有任何疑问或疑虑,请在下面发表评论或在Twitter上与我联系。