android平板上的GridView视图缓存优化

tvgrid:这是一个Android库,可帮助构建用于电视的应用程序。 它是RecyclerView的扩展,可实现丰富的选择器主题 电视网格 使用箭头键或D-Pad导航的设备的RecyclerView。 (当然,它可以通过触摸来工作,但是选择器不会显示)单元选择器是该库的基础,可以进行大量自定义。 屏幕截图(来自示例) 用法 将库作为依赖项添加到build.gradle 依赖项{编译'info.awesomedevelopment:tvgrid:1.1.0'} 将应用程序名称空间添加到您正在使用此视图的XML的根元素中 xmlns:app =“ ” 代替RecyclerView使用 info.awesomedevelopment.tvgrid.library.TVGridView 自定义视图 XML格式 这些是XML可用的所有样式元素: <info.awesomedevelopment.tvgrid.library.TVGridView xmlns:android="http://schemas.a 立即下载

本文来自http://blog.youkuaiyun.com/hellogv/ ,引用必须注明出处!

      最近在做android平板上的开发,其中涉及到高分辨率之下使用GridView的性能问题。在Android手机软件开发中,如果在ListView或者GridView上使用大数量Item,很多人都会想到ViewHolder......没错,ViewHolder非常适合用在ListView或者每行小于4个Item的GridView。但是如果是高分辨率的设备(android平板甚至android电视),每行包含4个以上Item的话,即使用了ViewHolder也依然卡。

      如下图,每行9个Item,而且每个Item的图片都是从网络动态下载的,这时就比较考验GridView视图的优化了。

      本文提出的优化方法是:在getView()构建一个View列表(List<View>),把最近构建的View存起来,回退时直接从View列表中读取,而不是动态构建。使用这种方法有2个好处:

1.快速读取过去的Item;

2.直接保存View而不是Bitmap,避免了ImageView.setImageBitmaps()带来的延时。

当然坏处就是浪费内存,所以要设定一个上限,超过了就删掉最老的Item。
先来看看这种方法与ViewHolder的性能对比:


100个Item往下滚到的三组数据对比,如上图:
“CacheAdapter 缓存50个Item”跟ViewHolderAdapter的速度很接近,由于CacheAdapter有缓存,所以会有1~2次快速读取Item(10~20个)的情况,而ViewHolder的每次读取Item速度比较平均。
“CacheAdapter 缓存75个Item”只在第一次往下滚动时消耗较长时间,第二次用了缓存的Item,所以速度快了很多。

 

 

100个Item往上滚到的三组数据对比,如上图:

“CacheAdapter 缓存50个Item”比ViewHolderAdapter的速度略快,“CacheAdapter 缓存75个Item”依然是最快的。
总结:“CacheAdapter 缓存50个Item”速度与HolderView略快,读取最近的Item速度最快,缓存的Item越多速度越快。“CacheAdapter 缓存75个Item”占用内存最少,这是由于一部分图片下载失败,保存的Item的图片为空,实际上是缓存越多Item占用的内存越多。

PS:这里用到异步读取网络图片,成功下载的就占用较多内存,下载失败就占用较少内存,所以内存占用情况并不是一个时刻的绝对值,占用内存只用于参考.....

本文程序源码可以到http://www.rayfile.com/zh-cn/files/5ebf5666-958a-11e0-99ec-0015c55db73d/这里下载。

CacheAdapter.java是实现缓存Item的自定义Adapter,源码如下:

其中if(lstPosition.size()>75)是设置缓存的Item数量的关键地方,这里缓存75个Item。

ViewHolderAdapter.java是实现ViewHolder加载Item的自定义Adapter,源码如下:

testPerformance.java是主程序,通过注释符就可以分别测试CacheAdapter与ViewHolderAdapter的性能,源码如下:

Android水平翻页列表类似GridView Android水平翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,博客详解:http://www.cnblogs.com/homg/p/4417792.html 立即下载

相关推荐

安卓机顶盒相关-TV端GridView焦点移动事件处理.rar

TV端GridView焦点移动事件处理.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

ImageView设置图片的优化

ImageView设置图片的方式有很多钟,可以在xml里面写android:src=”@drawable/xxx”,也可以在java代码里面设置。 在java里面的设置方式也有多种,方法包括:setImageResource,setImageDrawable,setImageBitmap。 在xml里面设置实际上和在java里面调用setImageResource是一样的,当然xml多了一个解

qq_22274713的博客 926

Android代码-TV端GridView焦点移动事件处理.rar

TV端GridView焦点移动事件处理.rar

Android | setImageResource、setImageDrawable和setImageBitmap的区别

最近遇到ImageView控件设置的图片延迟才显示的问题(虽然最终发现原因是图片是全透明的)。 顺势跟踪了一下给ImageView设置图片的源码。 以下分析都是基于Android8.0 setImageResource 源码中对该接口的注释: /** * Sets a drawable as the content of this ImageView. * ...

明朗晨光的专栏 2万+

Honeywell EPKS 核心功能块组态与执行调度实战解析

本文深入解析Honeywell EPKS系统的核心功能块组态与执行调度技术,涵盖控制模块(CM)、顺序控制模块(SCM)和输入输出模块(IOM)的配置方法。通过实战案例分享执行顺序(ORDERINCM)和CEE执行周期的优化策略,帮助工程师提升工业自动化系统的控制精度和运行效率。

weixin_28724319的博客 412

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4546

android draw 动画,Android onDraw触发ImageView的setImageBitmap实现动画,可见时执行动画,不可见时自动停止动画...

Android onDraw触发ImageView的setImageBitmap实现动画,可见时执行动画,不可见时自动停止动画一个简单的小例子,这个例子首先从assets读取出若干张图片作为Bitmap资源,然后在onDraw里面每个25ms触发一次ImageView的setImageBitmap,这样做以25ms作为周期,循环的每隔25ms重新设置ImageView的图片源,达到动画效果,这样做...

weixin_42117224的博客 492

VSCode连接SAP ABAP开发环境

本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。

weixin_45293769的博客 2208

Android中的延迟加载系列4(ImageView)

在Android应用程序的开发中,从网络或者服务器上取得图片,往往需要花费一定的时间,占用一定的用户带宽,当页面有大量的图片时,如果不采取延迟加载的方法,则客户端需要等到所有的图片都获取之后,才可以呈现完整界面,这就可能导致界面反应不流畅,影响用户体验。 图片延迟加载的原理其实非常简单,有两种思路: 第一种思路是后台启动Thread下载图片,下载完成后,通过Message Hand

whyonly的专栏 3255

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 429

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 244

android开发中异步加载图片时bitmap对象总为null,AsynImageLoader andriod异步加载图片类...

public class AsynImageLoader {private static final String TAG = "AsynImageLoader";// 缓存下载过的图片的Mapprivate Map> caches;// 任务队列private List taskQueue;private boolean isRunning = false;private Context ...

weixin_42120541的博客 315

Android11原生设置屏幕亮由Gamma变化改为线性变化

从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L

Android 4923
上一篇: Android提高第二十一篇之MediaPlayer播放网络视频
下一篇: 一个程序员背后的女人所写的文章~~~也许有你的身影
欧巴Godwin
欧巴Godwin 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 9690粉丝 141原创
评论 86
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值