日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android ListView 的优化

發布時間:2024/9/5 Android 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ListView 的优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、復用convertView。降低findViewById的次數

1、優化一:復用convertView

Android系統本身為我們考慮了ListView的優化問題,在復寫的Adapter的類中。比較重要的兩個方法是getCount()和getView()。

界面上有多少個條顯示,就會調用多少次的getView()方法;因此假設在每次調用的時候,假設不進行優化。每次都會使用View.inflate(….)的方法,都要將xml文件解析,并顯示到界面上。這是很消耗資源的:由于有新的內容產生就會有舊的內容銷毀。所以,能夠復用舊的內容。

優化:

在getView()方法中,系統就為我們提供了一個復用view的歷史緩存對象convertView,當顯示第一屏的時候,每個item都會新創建一個view對象,這些view都是能夠被復用的。假設每次顯示一個view都要創建一個,是很耗費內存的;所以為了節約內存,能夠在convertView不為null的時候,對其進行復用

2、優化二:緩存item條目的引用——ViewHolder

??? findViewById()這種方法是比較耗性能的操作。由于這種方法要找到指定的布局文件。進行不斷地解析每一個節點:從最頂端的節點進行一層一層的解析查詢。找到后在一層一層的返回。假設在左邊沒找到,就會接著解析右邊。并進行對應的查詢。直到找到位置(如圖)。因此能夠對findViewById進行優化處理,須要注意的是:

》》》》特點:xml文件被解析的時候。僅僅要被創建出來了,其孩子的id就不會改變了。依據這個特點。能夠將孩子id存入到指定的集合中,每次就能夠直接取出集合中相應的元素就能夠了。

優化:

在創建view對象的時候,降低布局文件轉化成view對象的次數;即在創建view對象的時候。把所有孩子所有找到,并把孩子的引用給存起來

①定義存儲控件引用的類ViewHolder

這里的ViewHolder類須要不須要定義成static。依據實際情況而定,假設item不是非常多的話。能夠使用。這樣在初始化的時候。僅僅載入一次。能夠略微得到一些優化

只是,假設item過多的話,建議不要使用。由于static是Java中的一個keyword。當用它來修飾成員變量時,那么該變量就屬于該類。而不是該類的實例。所以用static修飾的變量。它的生命周期是非常長的,假設用它來引用一些資源耗費過多的實例(比方Context的情況最多),這時就要盡量避免使用了。

??? class ViewHolder{

??? ???????? ???????? //定義item中對應的控件

??? ???????? }

②創建自己定義的類:ViewHolder holder = null;

③將子view加入到holder中:

在創建新的listView的時候,創建新的ViewHolder,把所有孩子所有找到,并把孩子的引用給存起來

通過view.setTag(holder)將引用設置到view中

通過holder,將孩子view設置到此holder中,從而降低以后查詢的次數

④在復用listView中的條目的時候。通過view.getTag()。將view對象轉化為holder,即轉化成對應的引用,方便在下次使用的時候存入集合。

? 通過view.getTag(holder)獲取引用(須要強轉)

二、ListView中數據的分批及分頁載入:

需求:ListView有一萬條數據。怎樣顯示;假設將十萬條數據載入到內存,非常消耗內存

解決的方法:

優化查詢的數據:先獲取幾條數據顯示到界面上

進行分批處理---à優化了用戶體驗

進行分頁處理---à優化了內存空間

說明:

一般數據都是從數據庫中獲取的,實現分批(分頁)載入數據,就須要在相應的DAO中有相應的分批(分頁)獲取數據的方法,如findPartDatas ()

1、準備數據:

??? 在dao中加入分批載入數據的方法:findPartDatas ()

??? 在適配數據的時候,先載入第一批的數據,須要載入第二批的時候,設置監聽檢測何時載入第二批

2、設置ListView的滾動監聽器:setOnScrollListener(new OnScrollListener{….})

①、在監聽器中有兩個方法:滾動狀態發生變化的方法(onScrollStateChanged)和listView被滾動時調用的方法(onScroll)

②、在滾動狀態發生改變的方法中,有三種狀態:

手指按下移動的狀態:??????? ???????? ???????? SCROLL_STATE_TOUCH_SCROLL:// 觸摸滑動

慣性滾動(滑翔(flgin)狀態):?? SCROLL_STATE_FLING: // 滑翔

精巧狀態:????? ???????? ???????? ???????? ???????? SCROLL_STATE_IDLE:// 精巧

3、對不同的狀態進行處理:

分批載入數據,僅僅關心精巧狀態:關心最后一個可見的條目,假設最后一個可見條目就是數據適配器(集合)里的最后一個,此時可載入很多其它的數據。在每次載入的時候,計算出滾動的數量,當滾動的數量大于等于總數量的時候。能夠提示用戶無很多其它數據了。

轉載于:https://www.cnblogs.com/wzjhoutai/p/6885776.html

總結

以上是生活随笔為你收集整理的Android ListView 的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。