Android Listview 性能優化

首先我一般使用的適配器是BaseAdapter,其中有兩個方法最主要,分別是: getCount,getView,
在對Listview 進行優化的時候,首先使用 convertview 和viewHolder 配合進行優化,使用convertview的母的是
控件復用,從而加到減少內存的使用,使用viewHolder 的是減少findbyid 的次數.
但是在進行控件以后,在進行圖片加載的時候,會出現圖片錯位的問題,這是因為控件里面有上次殘留的圖片在里面,所以我們在初始化的時候需要設置一張默認圖,清楚上次殘留的圖片,從而避免圖片錯位.
注意: 在進行圖片加載的時候一般會造成 OOM(內存溢出),這個時候我們需要用到三級緩存策略,來進行處理,
首先三級緩存分別是:
1:強引用(Lrucache)
2:軟引用(SoftRenfence)
3:SD卡(現在被 DisKLrucache)
首先當我們需要加載圖片的時候:
首先從強引用里面找,如果強引用沒有,就從軟引用里面找,如果軟引用沒有就從SD卡里面找,如果SD卡沒有就從網絡加載,通過加載請求到的圖片存入到強引用(Lrucache)里面.
第二:強引用一般取內存的四分之一,當強引用滿了以后,就通過Lrucache 算法講部分圖片刪除,同時存入到軟引用里面,當軟引用滿了,就將部分圖片存入到SD卡里面,當SD卡滿了,就將一半的刪除,(刪除的時候根據使用日期排序),
注意:強引用是不能被垃圾回收機制回收的,軟引用是可以隨時被垃圾回收機制回收的.
:一半情況下我們加載的圖片的 url,是服務器經過二次采樣以后的url,只有當點擊看大圖的時候才加載原圖.
:無論在強引用,軟引用還是SD卡我們存圖片的時候都是以鍵值對的形式存的,他的鍵就是url,一般情況下使用MD5對URL進行加密,這樣做的目的是為了避免URL 里面有非法字符.
二次采樣:
注意:二次采樣分兩部進行,首先第一步我們需要獲取圖片的寬和高,同時獲取到需要采樣后的寬和高,通過寬和高計算出我們需要的采樣比,第二步:通過采樣比讓我們的圖片真正實現采樣縮放.
案例如下:
第一步:
假如說我有一張圖片是200*200,那么我想把這張圖片的縮略圖顯示在一個50*50ImageView上,那我的壓縮比例應該為4,(這就是我們第一步的操作了,我先加載圖片的邊界到內存中,這個加載操作并不會耗費多少內存)
?
第二步:
在第一次采樣的基礎上,我來進行二次采樣。二次采樣的時候,我把第一次采樣后算出來的結果作為一個參數傳遞給第BitmapFactory,這樣在加載圖片的時候系統就不會將整張圖片加載進來了,而是只會加載該圖片的一張縮略圖進來,這樣不僅提高了加載速率,而且也極大的節省了內存,而且對于用戶來說,他也不會有視覺上的差異
?
具體代碼如何實現:
?
第一次采樣:首先獲取new BitmapFactory.Options()獲取option對象, inJustDecodeBounds
設置為true只會加載圖片的邊框進來,并不會加載圖片具體的像素點,通過BitmapFactory.decodeFile(filePath, options);來進行第一次加載圖片,通過outWidth原圖的寬度,通過outHeight獲取原圖的高,接下來通過控件的寬度和控件的高度來獲取一個采樣率sampleSize,接下來進行第二次采樣設置inJustDecodeBoundsfalse,同時設置縮放比,設置inPreferredConfig的圖片的圖片格式有(分別為ALPHA_8RGB_565ARGB_4444ARGB_8888),最后進行圖片的加載.
?
具體實現代碼:
?
BitmapFactory.Options options = new BitmapFactory.Options();
// 第一次:設為true時,僅僅得到邊界,即寬高
options.inJustDecodeBounds=true;
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),options);
?
// 第二次:將options的值設為Config.RGB_565,會比默認的Config.ARGB_8888減少一半內存;
options.inPreferredConfig= Bitmap.Config.RGB_565;
// 將邊框縮減到原來寬高的1/100;
options.inSampleSize=Math.max(options.outWidth,options.outHeight)/100;
// 設置為false,表示不僅僅加載邊框,
options.inJustDecodeBounds=false;

bitmap=BitmapFactory.decodeFile(file.getAbsolutePath(),options)

轉載于:https://www.cnblogs.com/fanzhiguo/p/6023450.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270591.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端:JS實現數組去重常用的六種方法介紹

今天給大家分享JS實現數組去重常用的六種方法&#xff0c;希望對大家能有所幫助&#xff01;定義變量let arr [20,6,13,20,100,8,13,11]; let newArr [];1、兩層循環去重 for(let i 0;i < arr.length;i){for(let j i 1;j < arr.length;j){if(arr[i] arr[j]){arr.sp…

python自定義colorbar_python可視化 matplotlib畫圖使用colorbar工具自定義顏色

python matplotlib畫圖使用colorbar工具自定義顏色 colorbar(draw colorbar without any mapple/plot)自定義colorbar可以畫出任何自己想要的colorbar&#xff0c;自由自在、不受約束&#xff0c;不依賴于任何已有的圖(plot/mappable)。這里使用的是mpl.colorbar.ColorbarBase類…

不能讀取文件“itunes.library.itl”因為它是由更高級別的itunes所創建的

轉自&#xff1a;https://zhidao.baidu.com/question/80796363.html 是因為你安裝過高版本的后又裝你版本的itunes. 你在電腦上搜索所有硬盤上的itunes library.itl這個文件.搜到就刪了&#xff0c;而且搜索里選擇“高級選項”除了區分大小寫其它幾個都鉤上。這樣注消下&#x…

路由器:什么是軟路由,看完本篇文章你就懂了

今天小編給大家介紹一下軟路由具體是什么&#xff0c;有什么實際用途&#xff0c;看完本篇你就懂了&#xff01; 一、軟路由與硬路由概念介紹 硬路由&#xff1a;目前我們家里普遍使用的路由器&#xff0c;有廠家提供整體的解決方案&#xff0c;包括處理器、電源供應、嵌入式軟…

c#form+mysql儲存讀取圖片_C#從SQL server數據庫中讀取l圖片和存入圖片

本實例主要介紹如何將圖片存入數據庫。將圖片存入數據庫,首先要在數據庫中建立一張表,將存儲圖片的字段類型設為Image類型,用FileStream類、BinaryReader把圖片讀成字節的形式,賦給一個字節數組,然后用ADO.SqlCommand對象的ExecuteNonQuery()方法來把數據保存到數據庫中。主要代…

if...else..的錯誤用法

1.最近在寫js代碼完成一個前段DOM操作的函數時&#xff0c;自己錯誤的使用了if..else..控制體。為什么是錯誤的呢&#xff1f;看看我的 代碼你就明白了&#xff1a; 1 document.getElementsByClassName(eButton)[0].οnclickfunction(){2 var checkeddocument.getElementsB…

Git服務器報錯:host key for (ip地址) has changed and you have requested strict checking

一:報錯提示 如下&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key …

軟件:常用 Linux 軟件匯總,值得收藏

目錄 1、音頻軟件 2、聊天軟件 3、數據備份與恢復 4、桌面個性化工具 5、開發必備 6、 電子書工具 7、 編輯器軟件 8、教育軟件 9、電子郵件軟件 10、文件管理器 11、娛樂游戲 12、 圖形工具 13、互聯網瀏覽 14、 辦公效率工具 15、 生產力效率工具 16、 安全防護 17、文件共享…

java上下文即ServletContext

上下文即ServletContext,是一個全du局的儲存信zhi息的空間&#xff0c;服務器啟動&#xff0c;其就dao存zhuan在&#xff0c;服務器關閉&#xff0c;其才釋放。 所有用戶共用一個ServletContext。所以&#xff0c;為了節省空間&#xff0c;提高效率&#xff0c;ServletContext中…

數據幀,數據包,報文段,報文,分組,數據包的概念和區別

應用層——消息傳輸層——數據段(segment)網絡層——分組、數據包&#xff08;packet&#xff09;鏈路層——幀&#xff08;frame&#xff09;物理層——P-PDU&#xff08;bit&#xff09;分組、包&#xff0c;packet&#xff0c;信息在互聯網當中傳輸的單元&#xff0c;網絡層…

python開源自動化測試平臺_8款開源自動化測試框架,速速收藏

原標題&#xff1a;8款開源自動化測試框架&#xff0c;速速收藏來源&#xff1a;http://www.51testing.com/近年來&#xff0c; 自動化測試越來越熱門&#xff0c;該領域新的挑戰和機遇也在同步產生&#xff0c;尤其是AI&#xff0c;RPA和機器學習&#xff0c;可以預見會在幾年…

SpringBoot集成Redis用法筆記

今天給大家整理一下SpringBoot集成Redis用法筆記&#xff0c;希望對大家能有所幫助&#xff01;一、Redis優點介紹1、速度快不需要等待磁盤的IO&#xff0c;在內存之間進行的數據存儲和查詢&#xff0c;速度非常快。當然&#xff0c;緩存的數據總量不能太大&#xff0c;因為受到…

tomcat和servlet的關系

tomcat和servlet的關系 Tomcat 是Web應用服務器,是一個Servlet/JSP容器. Tomcat 作為Servlet容器,負責處理客戶請求,把請求傳送給Servlet,并將Servlet的響應傳送回給客戶.而Servlet是一種運行在支持Java語言的服務器上的組件. Servlet最常見的用途是擴展Java Web服務器功能,提…

Linux常用遠程連接工具介紹,總有一款適合你

目錄 1、xshell 2、winscp 3、PuTTY 4、MobaXterm 5、FinalShell 今天給大家推薦Linux常用遠程連接工具&#xff0c;希望對大家能有所幫助&#xff01; 1、xshell 介紹&#xff1a; xshell是一個非常強大的安全終端模擬軟件&#xff0c;它支持SSH1, SSH2, 以及Windows平臺的TEL…

python高性能寫法_py 高性能低級,高級寫法思考

這里所謂的低級&#xff0c;高級是指封裝抽象的程度。低級指os.fork()高級是指 multiprocessing包一般根據業務需求&#xff0c;一個主進程負責維護接收&#xff0c; 不同的子進程處理不同的需求。根據各同需求組合多進程多線程多進程&#xff0b;多線程協程也可基于uvloop事件…

Linux遠程管理協議相關知識介紹

一、什么是遠程管理遠程管理&#xff0c;實際上就是計算機&#xff08;服務器&#xff09;之間通過網絡進行數據傳輸&#xff08;信息交換&#xff09;的過程&#xff0c;與瀏覽器需要 HTTP 協議&#xff08;超文本傳輸協議&#xff09;瀏覽網頁一樣&#xff0c;遠程管理同樣需…

使用ArcGIS JavaScript API 3.18 加載天地圖

對于中國開發者在創建GIS應用的時候&#xff0c;往往比較頭疼的是底圖資源的缺乏。其實國家測繪地信局就提供一個很好的免費資源&#xff1a;天地圖。使用ArcGIS API的開發人員可以直接利用該資源作為地圖應用的底圖。 ArcGIS JavaScript API最近新推出了3.18版本。所以下面示例…

潛力的監控mysql_Grafana 數據庫監控平臺

Grafana 數據庫監控平臺簡介Grafanademo 地址&#xff1a;官方demo文檔可以下載pdf離線閱讀Percona監控和管理(PMM)是一個用于管理和監控MySQL和MongoDB性能的開源平臺。它由Percona與托管數據庫服務&#xff0c;支持和咨詢領域的專家合作開發。PMM是一種免費的開源解決方案&am…

PC軟件:推薦七款Windows下寶藏軟件

目錄 一、uTools 效率神器 二、Groupy 窗口切換神器 三、Revo Uninstaller 卸載神器 四、Universal Viewer 五、VectorMagic 六、QuickLook 文件預覽神器 七、Bandizip 壓縮神器 今天給大家推薦七款Windows下軟件&#xff0c;每一個都值得擁有。 一、uTools 效率神器 一個可以幫…