改变 LiveData 的观察者时会发生什么?

huangapple 未分类评论58阅读模式
英文:

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 =  &quot;%&quot; + s + &quot;%&quot;;
                    Log.d(TAG, &quot;onQueryTextChange: &quot; + query);
                    problemViewModel.getProblemsByQuery(query).observe(getViewLifecycleOwner(),observer);
                    return true;
                }
                    
                        
I&#39;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&#39;s what you want.


</details>



huangapple
  • 本文由 发表于 2020年7月24日 07:44:50
  • 转载请务必保留本文链接:https://java.coder-hub.com/63064715.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定