当前位置: 首页 > news >正文

如何设计一个logo海沧抖音搜索seo推广运营

如何设计一个logo,海沧抖音搜索seo推广运营,心理咨询 网站模版,企业网站seo诊断报告引言 在 Android 开发中#xff0c;RecyclerView是高效展示列表数据的核心组件。其强大的性能源于独特的视图复用机制和四级缓存体系。本文将结合源码与示例#xff0c;带你深入理解RecyclerView的工作原理与优化策略。 核心组件 RecyclerView#xff1a;作为容器视图RecyclerView是高效展示列表数据的核心组件。其强大的性能源于独特的视图复用机制和四级缓存体系。本文将结合源码与示例带你深入理解RecyclerView的工作原理与优化策略。 核心组件 RecyclerView作为容器视图负责管理和展示列表数据。它会根据布局管理器对列表项进行布局。LayoutManager用于确定列表项的布局方式如线性布局、网格布局、瀑布流布局等。Adapter充当数据和视图之间的桥梁负责将数据绑定到视图上。它会创建列表项的视图并填充数据。ViewHolder用来缓存列表项视图中的子视图避免每次都通过 findViewById 查找视图从而提升性能。 工作流程 1. 初始化 RecyclerView 在布局文件里添加 RecyclerView 组件然后在代码中对其进行初始化。 androidx.recyclerview.widget.RecyclerViewandroid:idid/recyclerViewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent/ import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView findViewById(R.id.recyclerView);// 设置布局管理器recyclerView.setLayoutManager(new LinearLayoutManager(this));} } 2. 创建 Adapter 和 ViewHolder Adapter 要继承 RecyclerView.Adapter并实现必要的方法。ViewHolder 则要继承 RecyclerView.ViewHolder。 import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List;public class MyAdapter extends RecyclerView.AdapterMyAdapter.MyViewHolder {private ListString dataList;public MyAdapter(ListString dataList) {this.dataList dataList;}NonNullOverridepublic MyViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {// 创建视图View view LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);return new MyViewHolder(view);}Overridepublic void onBindViewHolder(NonNull MyViewHolder holder, int position) {// 绑定数据String data dataList.get(position);holder.textView.setText(data);}Overridepublic int getItemCount() {return dataList.size();}public static class MyViewHolder extends RecyclerView.ViewHolder {TextView textView;public MyViewHolder(NonNull View itemView) {super(itemView);textView itemView.findViewById(android.R.id.text1);}} } 3. 设置 Adapter 在 Activity 或者 Fragment 中为 RecyclerView 设置 Adapter。 import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(this));// 模拟数据ListString dataList new ArrayList();for (int i 0; i 100; i) {dataList.add(Item i);}// 设置 AdapterMyAdapter adapter new MyAdapter(dataList);recyclerView.setAdapter(adapter);} } 视图复用机制 RecyclerView 最核心的优化点在于视图复用机制。当列表项滑出屏幕时RecyclerView 不会将其销毁而是把它放入回收池中。当新的列表项需要显示时RecyclerView 会优先从回收池中获取可用的视图然后通过 Adapter 的 onBindViewHolder 方法为其绑定新的数据这样就避免了频繁创建和销毁视图大大提升了性能。 RecyclerView 的缓存机制是其高效展示大量数据的关键所在它能够显著减少视图创建和销毁的开销从而提升性能和响应速度。下面为你详细介绍 RecyclerView 的缓存机制。 缓存层级 RecyclerView 的缓存机制包含四级缓存分别是 Scrap 缓存mAttachedScrap 和 mChangedScrap 功能这是 RecyclerView 的一级缓存用于临时存储正在被重新布局的 ViewHolder。当 RecyclerView 进行布局操作时比如滚动、插入或删除项目这些 ViewHolder 会被暂时从屏幕上移除并放入 Scrap 缓存中布局完成后再从这里取出重新使用。特点速度最快因为这些 ViewHolder 无需重新绑定数据可直接复用。 Cache 缓存mCachedViews 功能二级缓存用于存储最近被移除屏幕的 ViewHolder。当用户快速滚动列表时这些 ViewHolder 可以被快速复用而不需要重新创建和绑定数据。特点默认大小为 2可以通过 setItemViewCacheSize 方法进行调整。缓存中的 ViewHolder 保持着原有的数据和状态复用速度较快。 ViewCacheExtension 缓存 功能三级缓存这是一个由开发者自定义的缓存接口。开发者可以根据自身需求实现这个接口以创建自定义的缓存逻辑。特点灵活性高但需要开发者自己管理缓存的添加、移除和查找操作。 RecycledViewPool 缓存 功能四级缓存用于存储不同类型的 ViewHolder。当 Cache 缓存已满时新移除的 ViewHolder 会被放入 RecycledViewPool 中。当需要新的 ViewHolder 时如果 Scrap 缓存和 Cache 缓存中没有可用的就会从 RecycledViewPool 中查找。特点这里的 ViewHolder 会被重置需要重新绑定数据。不同类型的 ViewHolder 可以有不同的缓存大小默认每个类型的缓存大小为 5。 缓存工作流程 1. 获取 ViewHolder 当 RecyclerView 需要一个新的 ViewHolder 来显示列表项时会按照以下顺序从缓存中查找 首先检查 Scrap 缓存如果找到匹配的 ViewHolder直接使用无需重新绑定数据。若 Scrap 缓存中没有接着检查 Cache 缓存。如果找到同样可以直接使用并且保留原有的数据和状态。若 Cache 缓存也没有再检查自定义的 ViewCacheExtension 缓存。若以上缓存都没有找到最后检查 RecycledViewPool 缓存。如果找到需要重新绑定数据。如果所有缓存中都没有找到合适的 ViewHolder则调用 Adapter 的 onCreateViewHolder 方法创建一个新的 ViewHolder并绑定数据。 2. 回收 ViewHolder 当列表项滑出屏幕时ViewHolder 会按照以下规则被回收 首先尝试将 ViewHolder 放入 Cache 缓存中。如果 Cache 缓存已满则将最旧的 ViewHolder 移除放入 RecycledViewPool 中然后将新的 ViewHolder 放入 Cache 缓存。如果 Cache 缓存没有满直接将 ViewHolder 放入 Cache 缓存。 示例代码 以下是一个简单的示例展示了如何使用 RecycledViewPool import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView1, recyclerView2;private RecyclerView.RecycledViewPool viewPool;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化 RecycledViewPoolviewPool new RecyclerView.RecycledViewPool();// 第一个 RecyclerViewrecyclerView1 findViewById(R.id.recyclerView1);recyclerView1.setLayoutManager(new LinearLayoutManager(this));recyclerView1.setRecycledViewPool(viewPool);ListString dataList1 new ArrayList();for (int i 0; i 100; i) {dataList1.add(Item 1 - i);}MyAdapter adapter1 new MyAdapter(dataList1);recyclerView1.setAdapter(adapter1);// 第二个 RecyclerViewrecyclerView2 findViewById(R.id.recyclerView2);recyclerView2.setLayoutManager(new LinearLayoutManager(this));recyclerView2.setRecycledViewPool(viewPool);ListString dataList2 new ArrayList();for (int i 0; i 100; i) {dataList2.add(Item 2 - i);}MyAdapter adapter2 new MyAdapter(dataList2);recyclerView2.setAdapter(adapter2);} } 在这个示例中两个 RecyclerView 共享同一个 RecycledViewPool这样可以提高视图的复用率减少内存开销。 缓存层级对比 缓存层级存储内容特点典型场景Scrap 缓存当前屏幕可见 ViewHolder无需重新绑定数据布局更新时复用Cache 缓存最近移出屏幕的 ViewHolder保留数据状态快速滚动时复用ViewCacheExtension自定义缓存逻辑开发者可控特殊业务场景RecycledViewPool未绑定数据的 ViewHolder跨列表共享缓存多个列表复用同一 ViewPool 2. 缓存工作流程 获取 ViewHolder按层级依次查找 Scrap → Cache → ViewCacheExtension → RecycledViewPool → 新建回收 ViewHolder移出屏幕时优先存入 Cache满容后转移至 RecycledViewPool 3. 缓存优化实践 // 配置缓存大小 recyclerView.setItemViewCacheSize(5); // 增大Cache缓存容量 recyclerView.getRecycledViewPool().setMaxRecycledViews(ViewType, 10); // 调整RecycledViewPool容量// 跨列表共享缓存 RecyclerView recyclerView1 findViewById(R.id.rv1); RecyclerView recyclerView2 findViewById(R.id.rv2); recyclerView2.setRecycledViewPool(recyclerView1.getRecycledViewPool()); 性能优化建议 合理使用 ViewHolder避免在onBindViewHolder中执行耗时操作数据变化优化使用DiffUtil实现局部刷新 DiffUtil.DiffResult diffResult DiffUtil.calculateDiff(new MyCallback(oldList, newList)); diffResult.dispatchUpdatesTo(adapter); 布局优化减少布局层级使用merge标签预加载策略通过addOnScrollListener实现分页加载 总结 RecyclerView通过视图复用和四级缓存实现了高效的列表渲染其设计思想对理解现代 UI 框架具有重要参考价值。在实际开发中需根据业务场景合理配置缓存参数结合DiffUtil等工具实现性能与体验的平衡。 感谢观看
http://www.pierceye.com/news/859065/

相关文章:

  • 汉口北做网站搜索广告是什么
  • 电商网站可以用dw做嘉兴网站建设平台
  • 做网站是数据库应该放在哪里建筑工程水平防护网
  • vps网站无法通过ip访问网站怎么做的支付宝接口
  • 怎么创建一个博客网站网站的c4d动画是怎么做的
  • 西安做企业网站科技论文发表网
  • html 手机网站开发企业做网站的合同
  • 建立wordpress网站吗全州建设完小网站
  • 网站域名注册证书是什么制作WordPress友情链接
  • 如何在解决方案中新建网站html网页制作的软件下载
  • 企业网站怎么做优化开小加工厂去哪接单子
  • 网站建设推广费怎么做账域名和网站绑定
  • 商丘网站建设想象力网络中国流量最大的网站排行
  • 网站是否有备案网站集约化建设建议
  • 浏览器收录网站网上做图赚钱的网站
  • 网站建设优化过程中的优化策略相关文章 wordpress
  • 泉州网站深圳航空公司官网首页
  • 百度推广整体优化网站整体软装设计公司
  • 太原搜索引擎优化招聘信息服务好的镇江网站优化
  • 自己做网站下载怎么网站基础知识域名5个点
  • 网站搭建合作协议wordpress注册页面插件
  • 网络公司最好的是哪个兰州网络推广优化怎样
  • 网站文章采集工具新网站怎么做流畅
  • discuz 手机网站模板山东省住房建设厅网站首页
  • 网站建设违约责任条款枣庄专业做网站
  • python做爬虫和做网站做两个一摸一样的网站
  • 网站做微信登录asp.net做网站头部和尾部_都用什么来实现
  • 南充哪里做网站太原关键词优化公司
  • 哪个网站做的ppt模板好投放广告网站
  • 公司网站中新闻中心怎样做优化百度浏览器电脑版