亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Android中的ListView組件原理分析與優(yōu)化

        2016-05-21 16:01:16李新輝
        計算機時代 2016年5期
        關鍵詞:優(yōu)化

        摘 要: ListView是開發(fā)Android應用程序中最常用的組件之一。分析了ListView基本工作機制和原理,提出了實際開發(fā)中合理使用ListView的必要性,闡述了提高ListView組件性能的四種優(yōu)化方法和思路。通過這幾種優(yōu)化手段,能有效幫助改善ListView的工作性能,增強應用程序的操作流暢性,從而帶來更佳的用戶體驗。

        關鍵詞: Android; ListView; 原理分析; 優(yōu)化

        中圖分類號:TP393.09 文獻標志碼:A 文章編號:1006-8228(2016)05-34-05

        Abstract: ListView is one of the most commonly used components in the development of Android application. This paper analyzes the basic working mechanism and principle of ListView, proposes the necessity of the reasonable use of ListView in practical development, and expounds four optimization methods and ideas to improve the performance of ListView components. These kinds of optimization methods can effectively help improving the performance of ListView, enhance the operation smoothness of the applications, and thus bring a better user experience.

        Key words: Android; ListView; principle analysis; optimization

        0 引言

        在開發(fā)Android應用時,通常都會用到Android SDK提供的一個名為ListView的組件。ListView能夠以列表行的形式展示數(shù)據(jù),并且能夠根據(jù)數(shù)據(jù)的長度自適應顯示,比如手機里的通訊錄就是使用ListView來顯示聯(lián)系人的信息,還有像新聞類和社交APP等也都用到了ListView組件,如圖1所示。相比Button之類的簡單控件而言,ListView的使用要復雜一些,而且如果處理不當就很容易在程序運行時引起一些性能問題,從而給用戶留下不良的印象,因此掌握ListView的正確使用方法顯得很重要。

        1 ListView原理分析

        ListView組件中的每一行被稱為子項(Item),它既可以是一個文本信息,也可以是一個包含若干組件的布局視圖。ListView的設計遵循適配器模式,即:顯示的數(shù)據(jù)需通過一個中間角色的“適配器”提供,以確定數(shù)據(jù)的具體顯示外觀,這也導致ListView組件在使用上要比普通組件麻煩一些,但它具有較大的靈活性。

        ListView顯示列表元素需三方面配合,包括:展示數(shù)據(jù)的視圖(View)、適配器(Adapter)以及具體數(shù)據(jù)(Data)。ListView并不直接獲取數(shù)據(jù)進行展示,而是間接通過“適配器”來得到具體要展示的數(shù)據(jù)視圖。Android SDK預定義了幾種適配器類型,如SimpleAdapter等,但直接從BaseAdapter自定義派生類可以得到更大的靈活性。下面是一個名為MyAdapter的適配器的基礎代碼框架:

        2 ListView的應用優(yōu)化

        考慮到ListView是Android應用普遍涉及的一個關鍵組件,如果使用不當,將會產(chǎn)生比較常見的“卡頓”現(xiàn)象。因此,合理地使用它可以極大改善應用程序的性能,帶來更佳的用戶體驗。以下從四個方面考慮ListView的具體優(yōu)化方法。

        2.1 重用列表行視圖

        根據(jù)上面的分析,ListView需要借助Adapter適配器中的getView()得到顯示的列表行視圖對象。在getView()方法中,最簡單的編程做法示例如下:

        以上代碼雖然簡單直接,但卻反復加載布局導致延時和內(nèi)存消耗等問題,在數(shù)據(jù)量大的情況下,會有嚴重影響??紤]到getView()方法的convertView參數(shù)本身就是系統(tǒng)返回的可重用列表行視圖對象,相當于這個視圖對象已經(jīng)被滑動到屏幕之外,可以拿來重復使用,此時只需判斷convertView是否為null,以確定是手工產(chǎn)生新的視圖對象,還是重用這個返回的視圖對象[2]。優(yōu)化后的示例代碼如下:

        2.2 ViewHolder綁定

        重用系統(tǒng)返回的列表行視圖對象,可以大大減少反復加載布局界面的次數(shù)。既然列表行視圖對象可被重用,意味著這個視圖對象中的子控件也是原來的。上面的示例代碼中,每次定位子控件都使用findViewById()方法,盡管這樣做沒有問題,但反復調(diào)用將導致布局界面子控件的一次又一次的遍歷,特別是在ListView快速滑動時,白白浪費了手機的處理時間。為避免這個問題,可把復用的列表行視圖對象中的子控件引用地址保存起來[3],以省卻重復定位子控件過程。為了達到目的,我們先根據(jù)具體業(yè)務需求,定義一個名為ViewHolder的靜態(tài)內(nèi)部類,其成員變量就是列表行視圖對象中所需的子控件引用:

        2.3 觸摸滑動優(yōu)化

        在通過網(wǎng)絡獲取的數(shù)據(jù)量不大的情況下,或者數(shù)據(jù)本身存在于設備上,ListView的性能一般不會成為重點考慮的問題。但如果涉及到大量的后臺數(shù)據(jù),此時應合理規(guī)劃ListView的滑動時機,適時加載顯示數(shù)據(jù)。當用戶正在操作時,如果上下滑動速度快,列表行視圖就要切換得快,此時列表行視圖的切換速度就容易成為一個瓶頸。這需要充分考慮ListView的狀態(tài)以決定是否加載數(shù)據(jù)。如果ListView處于快速滾動的狀態(tài),我們可以讓getView()方法返回一個只有空數(shù)據(jù)的視圖對象,只有ListView處于普通速度觸摸滑動,或者在靜止空閑狀態(tài)的時候,才真正加載數(shù)據(jù)以更新列表視圖顯示的內(nèi)容[4]。

        為了做到這一點,可以利用ListView的onScrollStateChanged()方法,以便開發(fā)者根據(jù)當前ListView的狀態(tài)來決定做何種處理,包括空閑(IDLE)、普通滑動(SCROLL)、快速滾動(FLING)等三種:

        在這里,我們定義了一個int型變量scrollState來指示ListView的當前狀態(tài),開發(fā)者可以在適配器的getView()方法中根據(jù)scrollState的值,決定是加載數(shù)據(jù)還是返回一個空視圖。

        2.4 網(wǎng)絡數(shù)據(jù)本地緩存

        對于從網(wǎng)絡下載的數(shù)據(jù),為節(jié)省手機流量,一般都要使用SQLite將其緩存到設備的存儲卡上,當ListView上下滑動時,應首先檢查設備本地是否已經(jīng)存在緩存的數(shù)據(jù),如果沒有就啟動線程將數(shù)據(jù)下載并緩存起來。由于SQLite是一個內(nèi)置于Android的微型數(shù)據(jù)庫,像圖片之類的二進制數(shù)據(jù)就不適合存儲。盡管可以將下載的圖片以文件保存,不過,圖片的顯示卻是一個費時和消耗內(nèi)存的過程,特別是在ListView快速滑動時,很容易因為圖片加載和內(nèi)存反復垃圾收集造成卡頓現(xiàn)象,甚至處理不當還會引發(fā)內(nèi)存溢出等問題。此時,可以使用LruCache緩存技術解決這個問題[5]。LruCache的基本原理是把最近使用的對象緩存起來,當內(nèi)存占用達到一定水平時,把“最近最少使用”的對象從內(nèi)存中移除,避免產(chǎn)生OutOfMemory異常。LruCache還可以結合文件緩存一起使用,LruCache充當一級緩存,文件充當二級緩存。如果LruCache中存在所需圖像,ListView直接顯示即可。如果LruCache中沒有但存儲卡上有圖片文件,此時就加載圖像到內(nèi)存,緩存到LruCache并送給ListView顯示。只有當LruCache和存儲卡上均不存在所需圖像時,才啟動線程從網(wǎng)絡下載。當圖片下載完畢,在保存文件到存儲卡的同時,還將圖像加載到LruCache中。通過這種機制,可以讓ListView快速地加載和顯示圖片,即使是在加載大量圖像的情況下,仍能得到較高的界面響應速度和流暢性。

        3 總結

        本文介紹了Android應用開發(fā)中最常用的ListView組件的基本工作原理,闡述了ListView組件在開發(fā)中的四種優(yōu)化方法。有關ListView性能的兩個因素是,在適配器的getView()方法中不要執(zhí)行耗時的任務,也不要改行布局的尺寸。如果確需執(zhí)行耗時操作,可借助線程或線程池的方式進行異步任務處理,或者采取預加載機制。盡管ListView的使用比較簡單,但也存在局限性,比如修改數(shù)據(jù)時必須要調(diào)用notifyDataSetChanged()通知適配器,而且要實現(xiàn)比較復雜的動畫效果時就顯得有點力不從心。這種情況下,可以考慮使用功能更強的RecyclerView組件,當然其使用方法也更為靈活和復雜。

        參考文獻(References):

        [1] 李新輝,鄒紹芳.Android移動應用開發(fā)項目教程[M].人民郵電出版社,2014.

        [2] 黃宏程,胡敏,陳如松.Android移動應用設計與開發(fā)[M].人民郵電出版社,2014.

        [3] 楊豐盛.Android應用開發(fā)揭秘[M].機械工業(yè)出版社,2010.

        [4]丁振凡,吳小元.Android系統(tǒng)ListView控件數(shù)據(jù)遞增顯示研究[J].智能計算機與應用,2014.4(2):49-53

        [5] 王向輝,張國印,沈潔.Android應用程序開發(fā)[M]. 清華大學出版社,2010.

        猜你喜歡
        優(yōu)化
        超限高層建筑結構設計與優(yōu)化思考
        民用建筑防煙排煙設計優(yōu)化探討
        關于優(yōu)化消防安全告知承諾的一些思考
        一道優(yōu)化題的幾何解法
        由“形”啟“數(shù)”優(yōu)化運算——以2021年解析幾何高考題為例
        基于低碳物流的公路運輸優(yōu)化
        热久久网站| 欧美伦费免费全部午夜最新 | 日韩精品久久无码中文字幕| 久久久久亚洲av无码专区导航| 无码一区久久久久久久绯色AV| 91麻豆精品激情在线观最新| 亚洲第一幕一区二区三区在线观看 | 久久精品亚洲一区二区三区画质| 日本道免费一区二区三区日韩精品 | 免费无码又爽又刺激网站直播| 中文字幕被公侵犯的漂亮人妻| 久久aⅴ无码av免费一区| 色噜噜狠狠色综合欧洲| 麻豆国产精品伦理视频| 亚洲成人av一二三四区| 色狠狠色噜噜av天堂一区| 久久久久久av无码免费看大片| 国产国拍亚洲精品永久69| 人妻被公上司喝醉在线中文字幕| 浓毛老太交欧美老妇热爱乱| 久久综合国产乱子伦精品免费 | 日韩性感av一区二区三区| 一区二区三区天堂在线| 私人毛片免费高清影视院| 欧美日韩亚洲成人| 国产自产21区激情综合一区| 亚洲一区二区三区激情在线观看| 无码一区二区三区中文字幕| 亚洲欧美日韩综合久久| 国产真实乱XXXⅩ视频| 亚洲乱码av中文一区二区第八页 | 加勒比亚洲视频在线播放| 日本视频在线观看二区| 国产精品久久久久9999吃药| 欧美视频二区欧美影视| 国产精品,在线点播影院| 性感美女脱内裤无遮挡| 国内精品久久久久伊人av| 国精产品一区二区三区| 91精品国产闺蜜国产在线| 精品精品国产三级av在线|