英文:
What happens when i change the observer of a LiveData
问题
如果我有一个观察某些LiveData的ViewModel,并且使用以下代码行:
```java
myViewModel.getData.observe(getViewLifeCycle(), Observer);
如果我在我的ViewModel中有另一个LiveData data2
,并且我开始观察这个数据:
myViewModel.getData2.observe(getViewLifeCyle(), Observer);
第一个观察者会发生什么?这会被视为内存泄漏吗?
在开始观察另一个数据之前,我应该移除对数据的所有观察者吗?
编辑:
我有一个用于观察来自Room数据库中数据的SearchBar代码如下:
@Override
public boolean onQueryTextChange(String s) {
String query = "%" + s + "%";
Log.d(TAG, "onQueryTextChange: " + query);
problemViewModel.getProblemsByQuery(query).observe(getViewLifecycleOwner(), observer);
return true;
}
我关注这一行:
problemViewModel.getProblemsByQuery(query).observe(getViewLifecycleOwner(), observer);
我在方法内多次重复这行代码,每当文本发生变化时。这会引发问题吗?
<details>
<summary>英文:</summary>
What happens if I have a ViewModel that observes some LiveData With the following line of code
myViewModel.getData.observe(getViewLifeCycle(),Observer);
what if I have anther LiveData data2 inside my view model and I started observing this data.
myViewModel.getData2.observe(getViewLifeCyle(),Observer);
what happens for the first observer ? is that considered to be a memory leak?
should I remove all the observers on the data before I go observing anther data?
EDIT :
I have the following code for a SearchBar that I use to Observe the data from Room Database.
@Override
public boolean onQueryTextChange(String s) {
String query = "%" + s + "%";
Log.d(TAG, "onQueryTextChange: " + query);
problemViewModel.getProblemsByQuery(query).observe(getViewLifecycleOwner(),observer);
return true;
}
I'm concerned with this line.
problemViewModel.getProblemsByQuery(query).observe(getViewLifecycleOwner(),observer);
I repeat it over and over inside the method whenever the text changes. so will that cause a problem?
</details>
# 答案1
**得分**: 0
这里目前没有明显的泄漏。您当然可以同时观察尽可能多的 LiveData - 只要能够放入内存中。如果需要的话,它们都可以共享同一个观察者对象。
<details>
<summary>英文:</summary>
There is no leak immediately visible here. You can certainly observe as many LiveData as you want simultaneously - as many as you can fit into memory. And they can all share the same observer object, if that's what you want.
</details>
专注分享java语言的经验与见解,让所有开发者获益!
评论