• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Android移動開發(fā)中ListView性能優(yōu)化分析與實現(xiàn)

    2014-11-25 11:00:39呂海洋劉忠利劉競男
    數(shù)字化用戶 2014年18期
    關(guān)鍵詞:適配器控件列表

    呂海洋 劉忠利 劉競男

    【摘 要】Android系統(tǒng)開發(fā)是目前移動互聯(lián)開發(fā)的主流系統(tǒng),相對于計算機開發(fā),其內(nèi)存小、屏幕小,所以,對應(yīng)用程序的性能有特別高的要求。ListView是android開發(fā)中最重要的控件之一,使用頻率特別高,幾乎每個項目中都需要使用ListView控件實現(xiàn)列表顯示,因此,提高ListView控件的性能對整個項目的質(zhì)量及用戶體驗至關(guān)重要,本文分析了ListView控件的實現(xiàn)原理,著重對其性能進行優(yōu)化。

    【關(guān)鍵字】Android開發(fā) ListView 性能優(yōu)化

    一、引言

    ListView控件是Android控件中使用最廣泛的控件之一,在程序加載過程中,如果數(shù)據(jù)較大容易出現(xiàn)白屏,等待時間較長,占用較大內(nèi)存甚至出現(xiàn)ANR(Application Not Responding)異常等問題;如果應(yīng)用程序連接網(wǎng)絡(luò)會浪費用戶流量。為了解決該控件中出現(xiàn)的一系列問題,提高ListView的性能進行優(yōu)化。

    二、ListView原理與分析

    (一)LsitView顯示的基本原理

    List控件如果要顯示數(shù)據(jù)需要具備以下元素:ListView列表控件,數(shù)據(jù)適配器,布局文件,數(shù)據(jù)。四者的關(guān)系如下圖1所示。其中,ListView是基本的顯示控件,以列表的形式顯示數(shù)據(jù)信息,XML布局文件定義了ListView控件中每個item項包含的控件及布局格式,數(shù)據(jù)可以是數(shù)組、List集合等,存放要顯示的TextView、ImageView等控件的數(shù)據(jù)信息,Adapter為適配器將數(shù)據(jù)按照xml布局文件的格式顯示在List控件之中。

    (二)BaseAdapter的原理

    BaseAdaper是基本數(shù)據(jù)適配器,將數(shù)據(jù)資源按照布局文件格式填充到ListView控件,其中有相應(yīng)的重寫方法,用于顯示每項內(nèi)容的是public void getView(int Position, View convertView,ViewGroup parent){ }

    圖1 ListView應(yīng)用關(guān)系圖

    在圖1中,數(shù)據(jù)和xml布局文件是已定義好的內(nèi)容,不可以改變。如果提高ListView的性能,只有對Adaper的優(yōu)化,重點是getView的設(shè)計。重點分析getView的設(shè)計中占用內(nèi)存的關(guān)鍵環(huán)節(jié)所在。

    三、分析問題

    造成數(shù)據(jù)加載時間較長以及占用內(nèi)存的主要問題是在getView方法中的兩項主要操作占用了系統(tǒng)內(nèi)存。第一,對于列表顯示的每一項內(nèi)容,都需要加載其布局文件(假設(shè)布局文件為item.xml)。即View view = Inflater.inflate(R.layout.item1,null);第二,對于每一項中的各種控件都需要進行查找(假設(shè)只有TextView控件)。

    基于以上兩點,如果數(shù)據(jù)內(nèi)容較大會占用較大內(nèi)存,影響數(shù)據(jù)加載及顯示效果。

    四、性能優(yōu)化方案

    為了解決以上問題,可以采取以下優(yōu)化方案。

    (一)利用convertView的復(fù)用,減少創(chuàng)建view的次數(shù)。

    在ListView中,并不能顯示全部數(shù)據(jù),只是按照屏幕可以容納的最大項目顯示列表項,對于每個顯示項都需要調(diào)用getView()方法?;瑒舆^程中一定是有項進入,有項目退出。退出的項將保存在convertView項,因此新項目可以利用convertView,省略使用inflater方法加載布局文件。每次首先判斷convertView是否為空,如果空,我們創(chuàng)建新的convertView;如果不為空,直接利用convertView創(chuàng)建view。不用再次填充布局,能夠節(jié)省大量內(nèi)存,效率可以提高200%左右。

    (二)創(chuàng)建ViewHolder類,減少findbyId的次數(shù)。

    加入的每一項,具有相同的控件。每個控件需要在布局文件中找到相應(yīng)的控件并為其設(shè)定內(nèi)容。為了減少每次加載一些都需要到布局文件中查找每個控件,可以定義一個Viewholder類,為每項創(chuàng)建一個holder對象,將所有控件保持在holder中,并且通過setTag標(biāo)簽進行查找,減少查找控件的次數(shù),效率可以再提高50%。

    (三)優(yōu)化代碼

    1.Public View getView(int position, View convertView, ViewGroup parent) {

    2.ViewHolder holder=null;

    3.if(convertView==null){ //如果為空,需要填充布局文件

    4.convertView=mInflater.inflate(R.layout.item1,null);

    5.holder=new ViewHolder();

    6.holder.textView=(TextView)convertView.findViewById(R.id.text);

    7.convertView.setTag(holder);

    8.}else {

    9.Holder = (ViewHolder)convertView.getTag();

    10.}

    11.holder.textView.setText(mData.get(position));

    12.return convertView;

    13.}

    14.}

    15.Public class ViewHolder{

    16.Public TextView textView;

    17.}

    五、結(jié)論

    通過對ListView的優(yōu)化,可以有效的提高顯示效果及加載速度,同時提高用戶體驗效果。如果進行大量數(shù)據(jù)加載,可以對較大數(shù)據(jù)采取分頁方式加載,如果對于加載網(wǎng)絡(luò)資源,可以采取異步方式。

    參考文獻:

    [1]關(guān)于ListView控件優(yōu)化方案的研究與實現(xiàn) ,Computer Era 2012,沈潔等.

    [2]Donet框架控件ListView的排序研究,冶金自動化 2008,衛(wèi)萬勇.

    猜你喜歡
    適配器控件列表
    巧用列表來推理
    學(xué)習(xí)運用列表法
    擴列吧
    關(guān)于.net控件數(shù)組的探討
    軟件(2018年7期)2018-08-13 09:44:42
    適配器模式及其應(yīng)用
    電子測試(2017年11期)2017-12-15 08:57:45
    新型水文測驗GPS適配器設(shè)計與應(yīng)用
    基于藍(lán)牙串口適配器的GPS接收機與AutoCAD的實時無線通信
    地礦測繪(2015年3期)2015-12-22 06:27:26
    美國麥格普公司新型M—LOK相機三腳架適配器
    輕兵器(2015年20期)2015-09-10 07:22:44
    不含3-圈的1-平面圖的列表邊染色與列表全染色
    就這樣玩會VBA中常見的自定義控件
    電腦迷(2012年24期)2012-04-29 00:44:03
    渝中区| 江陵县| 汉川市| 亳州市| 十堰市| 峨边| 长顺县| 广安市| 芒康县| 宁强县| 油尖旺区| 滦南县| 乌鲁木齐市| 鸡西市| 盐城市| 商河县| 通许县| 马龙县| 常德市| 横山县| 丹巴县| 西平县| 汶川县| 鄂托克旗| 桐庐县| 喀喇沁旗| 科技| 丹寨县| 齐河县| 开封市| 武汉市| 彰化市| 望城县| 新郑市| 绥阳县| 绍兴市| 香港| 德令哈市| 大冶市| 电白县| 讷河市|