回收视图如何在内部工作?

在构建Android应用程序时,我们很有可能必须在我们的项目中使用回收视图。

在这篇文章中,我们将了解回收器视图在Android系统中的实际工作方式。

我们将讨论,

  • 什么是回收视图?
  • 回收站的构建组件视图
  • 它是如何工作的?
  • 视图持有者的用法

什么是回收视图?

回收视图是一个视图组,它填充在视图持有者的帮助下提供的数据集合的列表,并将其绘制到屏幕上的用户。

回收站的构建组件视图

回收站的主要组成部分是,

  • 适配器
  • ViewHolder
  • 布局管理器

适配器

它是回收器视图类的子类型。它采用必须在回收视图中向用户显示的数据集。它就像主要的负责类来绑定视图并显示它。

大多数任务发生在回收器的适配器类中View。

ViewHolder

ViewHolder 是一种帮助程序类,可帮助我们为要在屏幕上绘制的各个项目绘制 UI。

各个项的视图的所有绑定都发生在此类中。它是回收器视图.视图持有者类的子类。

布局管理器

布局管理器 在回收器View中帮助我们弄清楚我们需要如何在屏幕上显示项目。它可以是线性的,也可以是在网格中。
默认情况下,回收视图提供了一些现成的布局管理器实现。

它就像回收商视图的管理机构,它告诉回收商View的适配器何时创建新视图。

它是如何工作的?

因此,现在我们将讨论回收器视图的实际工作原理。当我们谈论回收者视图时,您总是会听到有人说它回收了视图。但它实际上意味着什么呢?

因此,假设当我们滚动集合中包含50个项目的列表时,我们在列表中一次只显示5个项目,例如,

在这里,项目1到项目5是在屏幕上可见的那些。 是当我们向上滚动时将在屏幕上加载的下一个。item x

此处的所有项目都有自己的视图持有者实例,此处的视图持有者有助于缓存特定项目的视图。

那么,回收在这里是如何运作的呢?

让我们分步骤分解。

步骤01

第一项 x 到第 4 项必须在初始启动时显示到屏幕。因此,它们是处于可见视图模式的五个项目。让我们将它们称为可见视图。

并且,项目 5 是在向上滚动列表时要加载的新项目。

步骤02

当我们在上面滚动一个项目时,项目x向上移动,一个新项目,项目5出现在可见视图类别中。

现在,项目 6 处于等待视图中。

此处,项目 x 已从屏幕顶部的可见视图中移出。这称为报废视图。

ScrapView是回收视图中的视图,它曾经是可见的,现在对用户来说不可见在手机屏幕上。

步骤03

现在,假设我们又向上滚动了一步。这会将项目 1 移出屏幕,项目 6 将移入屏幕。

在这里,项目 1 也成为报废视图。现在,我们有两个废弃视图项 x 和项 1。

它们现在将存储在已报废视图的集合中。

因此,现在,当我们必须在可见视图组中加载新视图时,让我们考虑项目 7,然后使用已报废视图中集合中的视图。

步骤04

现在,当我们加载项目 7 时,我们从已报废的视图集合中获取视图。我们从报废视图中加载的视图称为脏视图。

现在,脏视图被回收并重新定位到队列中的新项目,该项目必须显示在屏幕上,即项目7。

我们从报废视图集合中获取的视图,然后在回收器适配器将其绘制到屏幕之前由ReplaceerView适配器重新绑定后,这些视图称为脏视图。

这就是回收视图中视图的回收方式,这是回收者视图更好改进的主要原因之一。在此过程中,将重用项目的视图以在屏幕上绘制新项目。

ViewHolder的用法

优化视图的另一种方式是因为回收视图中的ViewHolder。

因此,假设列表中显示100个项目,并且我们希望在屏幕上显示5个项目。

此处的每个项目在项目中都有 1 个文本视图和 1 个图像视图。

因此,使用 findViewById 映射每个视图始终是一项代价高昂的任务,想象一下我们可能需要映射 100 个项目(即 200 个查找视图字节)的所有文本视图和图像视图的数量。

因此,当我们使用RecysterView时,最初只创建6个项目,一次加载5个项目以显示在屏幕上,一个是要加载的项目。

现在,如果我们滚动列表,那么我们有7个ViewHolder。报废视图和待加载视图各一个,显示的视图各一个。

因此,一次最多只能有 14 个,因为我们最多有 7 个ViewHolder。

结论

由于ViewHolder和视图的回收,我们在回收视图中获得了性能改进。

同样,如果我们有多个视图类型,假设视图类型1和视图类型2,那么我们将有两个不同的报废视图集合,类型为视图类型1和视图类型2。

在回收视图时,视图类型 1 视图将仅分配给视图类型 1 的视图,并且视图类型 2 视图将分配给视图类型 2 视图。

这就是回收视图在内部高效工作的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本表和视图是数据库中的两种不同的数据组织形式,它们之间有以下区别: 1. 数据来源不同:基本表是数据库中存储数据的物理表格,而视图是基于一个或多个基本表的虚拟表格,其数据来源可以是一个或多个基本表。 2. 存储方式不同:基本表的数据是实际存储在数据库中的,而视图的数据是基于基本表的查询结果动态生成的。 3. 数据的可修改性不同:基本表中的数据可以直接进行修改,而视图中的数据是由基本表的查询结果生成的,不能直接进行修改。如果需要修改视图中的数据,则需要修改其对应的基本表。 使用视图的优点有以下几个方面: 1. 提高数据安全性:通过视图可以隐藏基本表的某些字段或某些行,从而保护敏感数据的安全性。 2. 简化数据查询:通过视图可以将多个基本表的数据整合在一起,形成一个虚拟的表格,简化了数据的查询操作。 3. 提高数据的独立性:通过视图可以屏蔽基本表之间的关系,使得基本表之间的关系更加灵活,从而提高了数据的独立性。 4. 方便数据的维护和管理:通过视图可以对数据进行分层管理,便于数据的维护和管理,同时也提高了数据的可维护性和可扩展性。 总的来说,基本表和视图是数据库中两种不同的数据组织形式,它们各有优缺点,需要根据实际情况选择合适的方式来组织和管理数据。视图的主要优点是提高了数据的安全性、简化了数据查询操作、提高了数据的独立性、方便数据的维护和管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值