在视图模型中使用大量实时数据的性能开销

时间:2018-12-04 07:05:48

标签: android android-recyclerview viewmodel android-livedata

我需要使用多个recyclerviews。 在以下情况下,我将至少需要6个recyclerviews。 6 = 1用于卧式recyclerview + 3用于viewpager中的每个片段+ 1用于recylerview + 1用于网格布局。

recycler view live data

由于数据复杂性巨大,每个适配器数据都依赖于其他适配器的更改,因此我决定使用android jetpack中引入的体系结构组件。因此,首先,我将集成视图模型和实时数据。稍后合并会议室数据库(现有的数据库在SQLite中)

正如我将使用多个实时数据来监视适配器数据更改一样。 我想清除我对视图模型和实时数据的性能方面的怀疑。

使用大量实时数据的性能开销

  1. 我将需要6到7个实时数据来观察每个适配器数据的变化。为了了解性能,假设要使用大约50到60个实时数据。

  2. 是最佳做法还是建议仅在房间内使用实时数据?

    我们可以在适配器数据或简单的原始类型(例如布尔值,整数等)上使用它吗(例如:isLoading:MutableLiveData,inputText:MutableLiveData textField字符串以监视更改。)

说某人可能要求它具有一个表格,该表格可能具有多个数字编辑文本,下拉菜单,多项选择等,并且每个表单都附加有实时数据。

  1. 实时数据如何在内部工作,它是否使用一些昂贵的资源来监视变量的变化

1 个答案:

答案 0 :(得分:0)

实时数据使用反应式编程(基于观察者模式) 我的观察是:

  • 实时数据的正确使用取决于您的数据生命周期,例如 例如,如果您只需要一个请求来验证用户和 密码(请求在您的程序生命周期中仅存在一次)不正确 要使用观察者,最好只使用回调(接口)。如果您在整个程序生命周期中都刷新了数据,那么实时数据是个好主意。

  • 另一方面,ViewModel处理您的实时数据生命周期,这意味着 仅当您的活动或片段(生命周期所有者)处于生命周期活动状态时,活动数据才处于活动状态,这样可以避免内存泄漏。

  • 房间的工作方式类似于SQLite(谈论性能)
    一些差异,例如语法,查询等。最重要的是 区别在于Room可以与Observer Pattern一起使用(您可以将 您的数据放入LiveData包装器中),则意味着房间使用观察者来通知数据更改(是否必要?)。

  • 您可以在某些情况下使用实时数据,并在视图模型中使用其他接口。这是一个优势,因为您可以根据情况使用这两种方式。

结论

  • 使用ViewModel是正确的

  • 生命周期取决于情况

  • 如果要优化实时数据包装器,那么,Room是最好的数据库(如果您有许多实时数据对象,则必须使用Room)

希望对您有帮助。