• 
    

    
    

      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
      铜川市| 普陀区| 怀柔区| 渭南市| 阿合奇县| 安康市| 贵南县| 鞍山市| 高碑店市| 临湘市| 会理县| 轮台县| 中宁县| 临桂县| 延津县| 聊城市| 上杭县| 宁明县| 桦南县| 祁连县| 兰考县| 历史| 英吉沙县| 兴隆县| 康保县| 梓潼县| 绥滨县| 分宜县| 闽侯县| 璧山县| 大悟县| 林口县| 新源县| 吉林省| 什邡市| 福贡县| 侯马市| 赤水市| 孟州市| 韶山市| 清新县|