针对Android上

时间:2016-06-28 18:15:28

标签: android android-recyclerview scrollview

我有10-15个自定义视图和片段的混合,以垂直列表显示。我不确定RecyclerView在所有视图不同的情况下是否有任何优势。 RecyclerView似乎增加了很多样板代码,我认为我唯一的优势就是更容易进入/退出动画。

我的自定义视图/片段也会在创建时调用Web服务。出于商业原因,我们不会缓存网络请求。我的理解是RecyclerView会在每个绑定上触发这些Web服务调用,从而导致冗余调用和可见延迟。相比之下,ScrollView应该加载一次视图,并将它们全部保存在内存中,避免多次调用。

我的理解是否正确?在给定的场景中,我需要一些帮助来理解ScrollViews对性能的影响。

2 个答案:

答案 0 :(得分:14)

<强>滚动型

使用ScrollView时,无论屏幕上的可见性如何,都会立即创建所有子视图。如果使用ScrollView作为解决方案,您可能希望“监听”其子视图何时可见,以便最初使用占位符更新其内容。您还可以构建一些可以在后台线程中获取内容的内容。这可能会比你想要的更复杂。

<强> RecyclerView

RecyclerView提供了延迟创建子视图直到它们自动显示的优势,并且可以重复使用具有共同布局的子视图。

通过为每个孩子使用不同的“项目视图类型”,您将禁用RecyclerView的“回收”部分,但仍然可以推迟创建视图,直到它们滚动到视图中。

RecyclerViews确实提供了一个结构合理的模式,供您通过Adapter和ViewHolders使用。虽然不熟悉它,但RecyclerView还有一个RecyclerView.ViewCacheExtension,旨在让开发人员控制视图的缓存。

总的来说,后期绑定的优势(不创建和加载可能永远不会被查看的视图)以及RecyclerView的灵活性可能会为您带来良好的结果。

答案 1 :(得分:3)

首先,你必须决定使用ViewFragment或两者兼而有之。不要将ViewFragment进行比较,对这两者存在一种常见的误解,它们并不相似,实际上Fragment在架构和Activity方面接近View实施

其次,您可以重复使用其中一些Fragment / RecycleView,如果是,那么RecycleView/ListView可以为您提供很多帮助。

在您确定了上述主题之后:

  

我的理解是RecyclerView会触发这些网络服务   调用每个绑定

不,这不是真的,每当显示新项目(重用或新创建)时都会调用绑定方法,您可以实现适配器仅对项目执行一次Web API,这是您的选择。

我总是尽可能地使用ScrollView,它有助于减少内存占用并减少实现。在某些情况下,如果视图中没有大量的内存使用,而我无法重用某些实现,那么我会选择import os import sys # Path for spark source folder os.environ['SPARK_HOME']="c:\\Spark" # Append pyspark to Python Path sys.path.append("C:\\Spark") sys.path.append("C:\\Spark\\python") sys.path.append("C:\\Spark\\python\\lib") sys.path.append("C:\\Spark\\python\\lib\\py4j-0.9-src.zip") from pyspark import SparkContext from pyspark import SparkConf ,但在实现之前我会三思而行。