【发布时间】:2017-10-11 17:07:57
【问题描述】:
我正在使用 AndroidViewModel 并返回数据流,无论是 Observable 还是 LiveData,到目前为止一切顺利,我看到 ViewModel 类中有一个方法,onCleared() 文档说
当这个 ViewModel 不再被使用时会调用这个方法并且 将被销毁。当 ViewModel 观察到一些数据并且 您需要清除此订阅以防止泄漏 视图模型。
我有一个场景,我从改造中返回Single<ApiResponse>,在ViewModel 中执行一些.map() 并以Single<ToBeShownOnUiResponse> 的形式返回响应,我在视图中订阅了这个,即片段。
我将订阅者添加到CompositeDisposable,然后将其清除onStop 片段。当我从 LoginActivity(保留登录/注册/密码重置片段)导航到 HomeActivity(与其他片段一起保留 tablayout)时,我看不到在 ViewModel 类的 onCleared() 方法中写入的日志。是我做错了什么还是我做的一团糟。
我的疑问是onCleared() 对我有什么帮助。我应该在里面写什么单独的代码或清理?
用法:
当我需要字符串资源时,我使用AndroidViewModel(根据xml中存在的字符串资源格式化一些api响应),当只有api调用需要我使用ViewModel。
【问题讨论】:
-
您可以在视图模型中的 onCleared 中处理一次性用品。如果您需要代码proandroiddev.com/…,这是一个不错的博客
-
正确,但根据谷歌示例,他们在 View(Activity/Fragment) 中而不是在 ViewModels 中编写了一次性
-
也可以在活动/片段被销毁时取消订阅
标签: android mvvm android-architecture-components