我有10-15个自定义视图和片段的混合,以垂直列表显示。我不确定RecyclerView在所有视图不同的情况下是否有任何优势。 RecyclerView似乎增加了很多样板代码,我认为我唯一的优势就是更容易进入/退出动画。
我的自定义视图/片段也会在创建时调用Web服务。出于商业原因,我们不会缓存网络请求。我的理解是RecyclerView会在每个绑定上触发这些Web服务调用,从而导致冗余调用和可见延迟。相比之下,ScrollView应该加载一次视图,并将它们全部保存在内存中,避免多次调用。
我的理解是否正确?在给定的场景中,我需要一些帮助来理解ScrollViews对性能的影响。
答案 0 :(得分:14)
<强>滚动型强>
使用ScrollView
时,无论屏幕上的可见性如何,都会立即创建所有子视图。如果使用ScrollView作为解决方案,您可能希望“监听”其子视图何时可见,以便最初使用占位符更新其内容。您还可以构建一些可以在后台线程中获取内容的内容。这可能会比你想要的更复杂。
<强> RecyclerView 强>
RecyclerView
提供了延迟创建子视图直到它们自动显示的优势,并且可以重复使用具有共同布局的子视图。
通过为每个孩子使用不同的“项目视图类型”,您将禁用RecyclerView的“回收”部分,但仍然可以推迟创建视图,直到它们滚动到视图中。
RecyclerViews确实提供了一个结构合理的模式,供您通过Adapter和ViewHolders使用。虽然不熟悉它,但RecyclerView还有一个RecyclerView.ViewCacheExtension
,旨在让开发人员控制视图的缓存。
总的来说,后期绑定的优势(不创建和加载可能永远不会被查看的视图)以及RecyclerView的灵活性可能会为您带来良好的结果。
答案 1 :(得分:3)
首先,你必须决定使用View
或Fragment
或两者兼而有之。不要将View
与Fragment
进行比较,对这两者存在一种常见的误解,它们并不相似,实际上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
,但在实现之前我会三思而行。