网站首页  词典首页

请输入您要查询的论文:

 

标题 基于延迟加载技术ListView控件的优化
范文 段顼++黄同成


摘要摘要:Android目前已是世界上占有率最大的手机平台,引发了一场移动互联网的开发热潮,其前景也被越来越多的人看好。针对使用安卓中ListView控件时存在的内存问题进行探讨,并实现了通过数据的延迟加载来优化ListView控件。
关键词关键词:ListView控件; 延迟加载技术;控件优化
DOIDOI:10.11907/rjdk.151950
中图分类号:TP319
文献标识码:A文章编号文章
编号:16727800(2015)011009302
基金项目基金项目:湖南省教育厅一般项目(14C1015);邵阳学院研究生科研创新项目(CX2014SY021)
作者简介作者简介:段顼(1989-),男,湖南邵阳人,邵阳学院机械与能源工程系硕士研究生,研究方向为移动通信应用开发及智能信息处理。
0引言
ListView是Android应用程序开发中最常用的控件之一,该控件使用垂直列表的方式显示多个选项。利用Android开发软件操作简单,尤其利用其可视化控件可大大提高编程效率。然而,ListView控件所占内存的大小将直接影响到ListView的运行速度。对于用户而言,一般通过开启无线WiFi或数据流量来加载数据,WiFi网络的好坏将极大地影响数据加载速度。当加载大容量数据(如图片)时,如果网络不是很好,加载则比较耗时;若开启数据流量,则将耗损大量流量。此外,由于移动终端手机显示屏的局限性,当显示批量数据时[1],若由用户自主决定是否加载更多数据,则较为合适且更人性化,也可以大大节省内存和流量。
1ListView控件与Adapter
ListView是一种可以显示一系列项目并能滚动显示的View,同时对于所有的子View都是相互独立的个体。通常由一个xml指定,并显示一条数据集合[2]。在每行中,既可以是简单的文本,也可以是复杂的结构。一般情况下,需要保证ListView渲染快速、滚动流畅。
列表的显示主要由ListVeiw、适配器和数据3个元素构成,其中,ListVeiw用来展示列表中的View;适配器用来把数据映射到ListView上;数据将被映射的字符串、图片或基本组件映射至ListView上。对于批量数据的显示,Adapter和ListView必须进行绑定,可以把Adapter看作ListView 的数据源,ListView接收Adapter传递的数据并显示出来。Adapter又可称为适配器,通过适配器可以实现用户界面View和数据的绑定。Adapter主要负责创建用于表示每一个条目的子View,同时提供对底层数据的访问。Android提供了多种类型的Adapter,并且能够支持用户自定义适配器,从而实现ListView控件中子View元素的布局显示[4]。
2延迟加载优化原理及实现
延迟加载即在不得不更新时才更新和加载。用户在滚动屏幕时,有些滚动是中间过程,这些行将一闪而过,实际上这些行没有必要在服务器上更新和下载,在这种情况下可以利用延迟加载技术监测ListView的滚动事件。滚动主要分为3个状态:①“Idle”:空闲,也即停止滚动;②“Touch scroll”:用户手指按下开始滚动;③“Fling”:滑动状态。
通过Adapter动态地获取数据,在Adapter中设定“TouchScroll”、“Fling”中的mBusy=true,“Idel”中的mBusy=false。通过WarnAdapter中的mBusy来判断用户行为,当mBusy=true:用户处在滑动屏幕或屏幕还处于滚动状态也即中间过程时,设定其显示内容为“Loding......”,在该情况下ListView并没有从服务器获取、加载和更新数据;当mBusy=false:用户停止滑动也即“Idel”时,才会加载和更新数据。
2.1通过onScrollStateChanged实现3种滚动状态监听
利用onScrollStateChanged实现用户停止滚动屏幕、按下滚动屏幕、滚动屏幕3种状态的监听,具体实现方法如下:
屏幕处于空闲状态,如图1所示,可以通过设定onScrollStateChanged状态SCROLL_STATE_IDLE,也即空闲状态,同时设定适配器中的WarnAdapter.mBusy=false,此时屏幕状态为mStatues.setText("Idle")。
屏幕处于滑动状态,如图2所示,可以通过设定onScrollStateChanged状态CROLL_STATE_FLING,也即滚动状态,同时设定适配器中的WarnAdapter.mBusy=true,此时屏幕状态为mStatues.setText("Fling")。
用户按下开始滑动,状态如图3所示,可以通过设定onScrollStateChanged状态为SCROLL_STATE_TOUCH_SCROLL,该状态为用户按下滑动屏幕,同时设定适配器中的WarnAdapter.mBusy=true,此时屏幕状态为mStatues.setText("TouchScroll")。
2.2通过WarnAdapter动态获取数据
创建一个WarnAdapter实现用户界面中View和数据的绑定以及动态获取数据。首先创建一个ViewHolder对象[5],用于View查找地址的保存。在WarnAdapter中通过判断mBusy是“true”还是“fasle”来判断是否从服务器中加载和更新数据:如果!mBusy也即当scrollState为Idel状态时,设定viewHolder.tvContent.setText(str[position]),此刻将加载和更新数据;若mBusy为“true”即scrollState为Touch scroll或Fling状态时,设定viewHolder.tvContent.setText("Loading…"),则此时ListView控件显示的内容为“Loding......”,在此情况下ListView控件并没有从服务器中获取和加载数据。
2.3效果对比
通过计时器记录耗时[6],通过对利用延迟加载技术与未使用延迟加载滑动至第30条数据所需时间的对比,判断延迟加载技术的效果。中间过程都加载与中间过程没有加载,也即使用延迟加载时耗时如图4、图5所示。
从上图可以看到,越过了中间过程后,滑动至第30条数据的耗时明显缩短,由此可知延迟加载技术对于ListView控件的优化有很好的效果。
3结语
本文利用onScrollStateChanged实现用户停止滚动屏幕、按下滚动屏幕、滚动屏幕3个状态的监听,利用WarnAdapter判断mBusy是“true”还是“fasle”来判断是否加载和更新数据,并利用计时器对两种不同方法达到同一目的所需时间进行对比。由两种方式的耗时可知,通过数据的延迟加载,可以让ListView渲染更快、滚动流畅,通过延迟加载避免了一些不必要的数据更新,减少了内存占用。对于用户而言,由于避免了一些中间过程的加载,因而能及时、快速地获取想要的信息。同时也能够节约用户流量,避免资源浪费,实现ListView控件的优化。
参考文献参考文献:
[1]丁振凡,吴小元.Android系统ListView控件数据递增显示研究[J].智能计算机与应用,2014,4(2):4953.
[2]张秀香.基于Android的健康管理系统客户端的设计与实现[D].大连:大连理工大学,2012.
[3]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011.
[4]黄宏程,胡敏,陈如松.Android移动应用设计与开发[M].北京:人民邮电出版社,2012.
[5]彭涛,孙连英.回调机制及其在Android应用开发中的应用[J].北京联合大学学报,2013,27(2):6872.
[6]蒋红,朱兆优.基于单片机的计时器设计[J].中国教育技术装备,2014,6(12):3134.
责任编辑(责任编辑:黄健)
随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/2/11 3:08:06