我正在使用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。
发布于 2020-03-31 06:29:53
调用onCleared的一个例子是当您使用ViewModel进行应用程序内计费时。在这种情况下,只要是一个活动(在下面的示例中我使用了BillingClient ),让BillingClient保持下去是很自然的,例如:
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()
}https://stackoverflow.com/questions/46693933
复制相似问题