我正在使用AndroidViewModel并返回数据流,无论是Observable还是LiveData,到目前为止一切顺利,我看到ViewModel类中有一个方法,onCleared()
文档说
当不再使用此ViewModel时,将调用此方法 将被销毁。当ViewModel观察到一些数据时,它很有用 您需要清除此订阅以防止此泄漏 视图模型。
我有一个场景,我从改造中返回Single<ApiResponse>
在.map()
中做一些ViewModel
并返回响应Single<ToBeShownOnUiResponse>
我在View that Fragment中订阅了这个。
我将订阅者添加到CompositeDisposable
,然后清除onStop
片段。当我从LoginActivity(保持signin / signup / passwordreset片段)导航到HomeActivity(用其他片段保持tablayout)时,我看不到用ViewModel类的onCleared()方法编写的日志。我正在做的事情是错的,或者我把它弄得一团糟。
我的问题是onCleared()
以什么方式对我有帮助。我应该写什么单独的代码或清理?
使用方法:
当我需要字符串资源时,我使用AndroidViewModel
(根据xml中存在的字符串资源格式化一些api响应),当只有api调用时,我使用ViewModel
。
答案 0 :(得分:0)
调用onCleared
的一个示例用例是当您使用ViewModel
进行应用内结算时。在这种情况下,很自然地让BillingClient一直持续到活动(在下面的示例中,我使用Application
),例如:
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()
}