Android性能优化RecyclerView预加载LayoutManager的getExtraLayoutSpace,Kotlin

Android性能优化RecyclerView预加载LayoutManager的getExtraLayoutSpace,Kotlin

RecyclerView默认只加载当前屏幕肉眼可见区域的有限item数量,有些场景下,需要在屏幕外不可见的区域多加载一批item出来,这有时候被称之为“预加载”,实现预加载的方式很多,RecyclerView的标准实现可以通过getExtraLayoutSpace实现。

import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerViewclass MainActivity : AppCompatActivity() {companion object {const val TAG = "fly"const val VIEW_TYPE = 0const val PRELOAD_SIZE = 10 //预加载多少条item,即Extra(多加载出来多高的内容)const val ITEM_HEIGHT_PIX = 100 //每条item的高度,单位pix}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val rv = findViewById<RecyclerView>(R.id.rv)val layoutManager = MyLinearLayoutManager(this)layoutManager.orientation = LinearLayoutManager.VERTICALrv.layoutManager = layoutManagerval adapter = MyAdapter(this)rv.adapter = adapter}class MyAdapter : RecyclerView.Adapter<MyVH> {constructor(ctx: Context) {}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVH {val view = LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)view.layoutParams.height = ITEM_HEIGHT_PIXreturn MyVH(view)}override fun getItemCount(): Int {return Int.MAX_VALUE}override fun getItemViewType(position: Int): Int {return VIEW_TYPE}override fun onBindViewHolder(holder: MyVH, position: Int) {Log.d(TAG, "onBindViewHolder $position")holder.pos.text = "$position"}}class MyVH(itemView: View) : RecyclerView.ViewHolder(itemView) {val pos: TextView = itemView.findViewById(android.R.id.text1)}class MyLinearLayoutManager : LinearLayoutManager {constructor(ctx: Context, data: Any? = null) : super(ctx) {}override fun getExtraLayoutSpace(state: RecyclerView.State?): Int {return PRELOAD_SIZE * ITEM_HEIGHT_PIX}}
}

注意,getExtraLayoutSpace返回的是屏幕外不可见区域需要预加载的所有item总高度,单位是pix。上面要预加载10条,每条item高度是100pix,也就是说,正确的情况下,如果RecyclerView不作任何调优,那它只加载当前屏幕可见区域position为0~21的item(每个item高度为100pix),如果配置了getExtraLayoutSpace,那么会多(Extra)加载10条position为22~31的item,其中22~31为屏幕底部不可见的区域中内容,被“预加载”出来。

Android Glide load grid RecyclerView scroll smooth, high performance and ,Kotlin-CSDN博客文章浏览阅读397次,点赞14次,收藏8次。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。https://blog.csdn.net/zhangphil/article/details/137520793

Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(a)-CSDN博客文章浏览阅读720次,点赞3次,收藏9次。文章浏览阅读410次。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。https://blog.csdn.net/zhangphil/article/details/136204914Android RecyclerView page/paging load,based on AsyncListUtil,kotlin(4)-CSDN博客文章浏览阅读501次。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。【代码】Android Paging 3,kotlin(1)https://blog.csdn.net/zhangphil/article/details/130786520Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(b)-CSDN博客文章浏览阅读375次。【代码】Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(b)https://blog.csdn.net/zhangphil/article/details/136218639Android RecyclerView AsyncListUtil手动刷新fillData,kotlin-CSDN博客文章浏览阅读428次。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。【代码】Android Paging 3,kotlin(1)https://blog.csdn.net/zhangphil/article/details/131519811

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

QEMU MINI2440 如何设置显示分辨率?

MINI2440: Option string mini24402tb MINI2440: t ignored, touchscreen not compiled in MINI2440: LCD 0:240x320 1:800x480 [2:1024x768] 嘿嘿你又懂了&#xff1f; nboot kernel setenv bootargs root/dev/mtdblock3 rootfstypejffs2 consolettySAC0,115200 mini24401t…

前端服务请求跨域被拦截,Java后端Springboot服务解决办法

跨域问题 跨域前端遇到的问题&#xff1a; Access to XMLHttpRequest at ‘http://www.xxx.xxxx/api/x/d/xc’ from origin ‘http://127.0.0.1:3000’ has been blocked by cors policy: No ‘Access-Contorl-Allow-Origin’ header is present on the requested resource. …

IDE Eval Reset —— idea 重置试用期插件安装

idea 重置试用期插件安装 一、在线安装&#xff1a; 1、打开IntelliJ IDEA 2、file—> setting —> plugins 添加三方插件库 点击后&#xff0c;跳出弹框点击号&#xff0c;添加图中的网址 https://plugins.zhile.io3、搜索 IDE Eval Reset &#xff0c;安装插件 4…

Excel·VBA二维数组S形排列

与之前的文章《ExcelVBA螺旋数组函数》将一维数组转为二维螺旋数组 本文将数组转为S形排列的二维数组&#xff0c;类似考场座位S形顺序 Function S形排列(ByVal arr, ByVal num_rows&, ByVal num_cols&, Optional ByVal mode$ "row")将数组arr转为num_rows…

动态规划求台阶

动态规划可以用来求解台阶问题&#xff0c;即在一个楼梯上&#xff0c;每次只能跨一个台阶或两个台阶&#xff0c;问有多少种不同的方式可以走到楼梯的顶部。 我们可以定义一个状态变量dp[i]&#xff0c;表示走到第i个台阶的不同方式数。则在第i个台阶上&#xff0c;只有两种走…

OpenHarmony开发案例:【分布式计算器】

介绍 本示例使用分布式能力实现了一个简单的计算器应用&#xff0c;可以进行简单的数值计算&#xff0c;支持远程拉起另一个设备的计算器应用&#xff0c;两个计算器应用进行协同计算。 远程拉起&#xff1a;通过StartAbility实现远端应用的拉起。 协同计算&#xff1a;通过…

ios包上架系列 一、打包机Flutter项目环境配置

打包的时候一定要断开网络&#xff0c;上线包名只能在打包机配置 1、Xcode 需要从其它电脑空投 版本号&#xff1a;14.3.1 升级到Xcode14.3后发现,从这个版本开始,苹果从Xcode中移除了ARC相关的库,会导致fluter项目下的原生工程使用Xcode编译原生代码没 有问题, 但是flutter项…

Python小工具提升工作效率【附完整版,可下载word】

1、多个ppt汇总成一个ppt的python代码实现: import win32com.client as win32 import os import re def find(s): pat = re.compile(r"\d+") result = pat.match(s) return int(result.group(0)) def join_ppt(path:str): """ :param path: ppt所…

springboot上传模块到私服,再用pom引用下来

有时候要做一个公司的公共服务模块。不能说大家都直接把代码粘贴进去&#xff0c;因为会需要维护很多份&#xff1b;这样就剩下两个方式了。 方式一&#xff1a;自己独立部署一个公共服务的服务&#xff0c;全公司都调用&#xff0c;通过http、rpc或者grpc的方式&#xff0c;这…

如何安装PyFluent

0.什么是PyFluent? 官方介绍如下&#xff1a; PyFluent 是 PyAnsys 生态系统的一部分&#xff0c; 允许您在所选的 Python 环境中结合使用 Fluent 与其他 PyAnsys 库和外部 Python 库一起使用。 PyFluent 实现了客户端-服务器体系结构。它使用谷歌遥控器 过程调用或 gRPC 接…

基于GSP工具箱的NILM算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于GSP工具箱的NILM算法matlab仿真。GSP是图形信号处理的缩写&#xff0c;GSP非常适合对未知数据进行分类&#xff0c;尤其是当训练数据非常短时。GSPBox的基本理论是谱图论和…

WPF网格布局

1介绍: Grid为WPF中最常用的布局容器, 它可以将一个区域分为若干个行或列功用其他组件使用。 2&#xff1a;网格标签Grid.ColumnDef Grid网格区域Grid.ColumnDefinitions自定义列 只能设置宽度 不能设置高度ColumnDefinition 网格布局中列的区域(可以设置宽度&#xff0c…

构建强大的物联网平台系统架构:关键步骤与最佳实践

随着物联网&#xff08;IoT&#xff09;技术的快速发展和广泛应用&#xff0c;越来越多的企业开始意识到搭建一个强大而可靠的物联网平台系统架构的重要性。一个完善的物联网平台可以帮助企业高效地管理和监控各种连接设备&#xff0c;并实现数据的收集、处理和分析。在本文中&…

npm i -g nodemon 遇到的下载卡住及运行权限问题解决记录

一、下载nodemon原因 nodemon作用&#xff1a;用node环境运行js文件时可以实时刷新运行出结果 (即修改js代码后不需再手动重新运行js文件) 二、下载卡住 reify:semver:timing reifyNode:node_modules/nodemon Completed 卡住位置&#xff1a;reify:semver: timing reifyNode…

【muzzik 分享】3D模型平面切割

# 前言 一年一度的征稿到了&#xff0c;倒腾点存货&#xff0c;3D平面切割通常用于一些解压游戏里&#xff0c;例如水果忍者&#xff0c;切菜这些&#xff0c;今天我就给大家讲讲怎么实现3D切割以及其原理&#xff0c;帮助大家更理解3D中的 Mesh(网格)&#xff0c;以及UV贴图和…

2024年免费试用云服务器一览表

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始寻求通过云服务器来满足其数据存储、应用部署等需求。而免费试用云服务器则成为了一个吸引用户的重要手段&#xff0c;本文将为大家分享2024年免费试用云服务器一览表&#xff0c;帮助大家更好地选择合适的…

Spring Boot 框架集成Knife4j

本次示例使用 Spring Boot 作为脚手架来快速集成 Knife4j,Spring Boot 版本2.3.5.RELEASE,Knife4j 版本2.0.7&#xff0c;完整代码可以去参考 knife4j-spring-boot-fast-demo pom.xml 完整文件代码如下 <?xml version"1.0" encoding"UTF-8"?> &l…

Flask、Django和Tornado怎么选

Flask、Django和Tornado是三个常用的PythonWeb框架&#xff0c;它们在设计理念、功能和适用场景上有所不同。下面是它们的对比&#xff1a; 1. 设计理念&#xff1a; - Flask是一个轻量级的框架&#xff0c;它提供了最基本的功能&#xff0c;但是具有高度的灵活性和可扩展性。…

Linux中的 mount -a

mount -a 是一个在 Linux 系统中用来挂载所有在 /etc/fstab 文件中定义的文件系统的命令。在 Linux 中&#xff0c;/etc/fstab 文件包含了系统启动时需要挂载的文件系统的信息&#xff0c;mount -a 命令会根据这些信息自动挂载这些文件系统。 mount -a 命令的作用&#xff1a;…