首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onCleared如何工作AndroidViewModel [architecture component]

onCleared如何工作AndroidViewModel [architecture component]
EN

Stack Overflow用户
提问于 2017-10-11 17:07:57
回答 1查看 1.7K关注 0票数 1

我正在使用AndroidViewModel并返回数据流,无论是可观察的还是LiveData的,到目前为止,它进行得很好,我看到ViewModel类中有一种方法,onCleared()文档说。

当此ViewModel不再使用时,将调用此方法,当ViewModel观察到某些数据时,该方法将是有用的,您需要清除此订阅以防止该ViewModel泄漏。

我有一个场景,我从改造中返回Single<ApiResponse>,在ViewModel中执行一些.map(),然后以Single<ToBeShownOnUiResponse>的形式返回响应,我在Viewi.e片段中订阅了这个片段。我将订阅服务器添加到CompositeDisposable中,然后清除onStop片段。当我从LoginActivity(hold /signup/passwordreset片段)导航到HomeActivity(与其他片段一起保持表布局)时,我看不到用ViewModel类的onCleared()方法编写的日志。是我做错了什么,还是我把它搞得一团糟。

我在这里的疑问是,onCleared()在何种方面对我有帮助。我应该在其中写哪些单独的代码或清理?

用法:当我需要字符串资源时,我使用AndroidViewModel(根据xml中的字符串资源格式化一些api响应),当只有api调用需要时,我使用ViewModel

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 06:29:53

调用onCleared的一个例子是当您使用ViewModel进行应用程序内计费时。在这种情况下,只要是一个活动(在下面的示例中我使用了BillingClient ),让BillingClient保持下去是很自然的,例如:

代码语言:javascript
复制
class BillingViewModel(application: Application)
  : AndroidViewModel(application), PurchasesUpdatedListener, BillingClientStateListener {

  private lateinit var playStoreBillingClient: BillingClient

  init {
    playStoreBillingClient = BillingClient.newBuilder(application.applicationContext)
        .enablePendingPurchases()
        .setListener(this).build()
    playStoreBillingClient.startConnection(this)
  }

...

 override fun onCleared() {
    super.onCleared()
    playStoreBillingClient.endConnection()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46693933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档