如何進行Bitmap資源最佳化?手把手教你!
前言
在 Android開發中,效能最佳化策略十分重要。本文主要講解 效能最佳化中的Bitmap使用最佳化,希望你們會喜歡。
目錄
1. 最佳化原因
即 為什麼要最佳化圖片Bitmap資源,具體如下圖:
2. 最佳化方向
本文將從 以下方面最佳化圖片Bitmap資源的使用 & 記憶體管理:
3. 具體最佳化方案
下面,我將詳細講解每個最佳化方向的具體最佳化方案
下面,我將詳細講解上述各個方案。
3.1 使用完畢後 釋放圖片資源
最佳化原因:使用完畢後若不釋放圖片資源,容易造成記憶體洩露,從而導致記憶體溢位
最佳化方案:
a. 在 Android2.3.3(API 10)前,呼叫 Bitmap.recycle()方法
b. 在 Android2.3.3(API 10)後,採用軟引用(SoftReference)
具體描述:在 Android2.3.3(API 10)前、後,Bitmap物件 & 其畫素資料 的儲存位置不同,從而導致釋放圖片資源的方式不同,具體如下圖:
注:若呼叫了Bitmap.recycle()後,再繪製Bitmap,則會出現Canvas: trying to use a recycled bitmap錯誤。
3.2 根據解析度適配 & 縮放圖片
最佳化原因:若 Bitmap 與 當前裝置的解析度不匹配,則會拉伸Bitmap,而Bitmap解析度增加後,所佔用的記憶體也會相應增加,主要因為Bitmap 的記憶體佔用 根據 x、y的大小來增加的。
最佳化方案:
3.3 按需 選擇合適的解碼方式
最佳化原因:不同的圖片解碼方式 對應的 記憶體佔用大小 相差很大,具體如下
特別注意:
1. 點陣圖位數越高,代表其可儲存的顏色資訊越多,影像越逼真
2. 一般情況下,使用ARGB_8888,其最佔記憶體 = 1個畫素佔4位元組
3. 示例:若有1張480x800的圖片,格式 = ARGB_8888,將會佔用1500KB的記憶體
最佳化方案:根據需求 選擇合適的解碼方式,需注意的是:
1. 使用引數:BitmapFactory.inPreferredConfig 設定
2. 預設使用解碼方式:ARGB_8888
3.4 設定 圖片快取
最佳化原因:重複載入圖片資源耗費太多資源(CPU、記憶體 & 流量)
最佳化方案
至此,關於圖片資源Bitmap的使用最佳化講解完畢
總結
本文全面&詳細的講解了效能最佳化中的 圖片資源Bitmap的使用最佳化,總結如下:
最後
有些東西有壓力才有動力,而學到的知識點,都是錢(因為技術人員大部分情況是根據你的能力來定級、來發薪水的),技多不壓身。
附上我的Android核心技術大綱,獲取相關內容來GitHub:
vx:xx13414521
還有Android的精選學習進階影片,三星架構師、阿里p7、聯通架構師等大牛講解進階內容,私信【學習影片 】領取
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2675338/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手把手教你如何進行 程式碼版本控制
- 在Linux中,如何進行網路資源的最佳化?Linux
- 在Linux中,如何進行系統資源的最佳化?Linux
- ASO最佳化 | 手把手教你用資料分析工具
- Spark如何進行動態資源分配Spark
- 手把手教你入門Hadoop(附程式碼&資源)Hadoop
- 如何進行 Python效能分析,你才能如魚得水?Python
- Java實戰:教你如何進行資料庫分庫分表Java資料庫
- 獨家 | 手把手教你學習R語言(附資源連結)R語言
- 教你如何進行SSH無密碼訪問密碼
- 教你如何進行Prometheus 分片自動縮放Prometheus
- 網站開啟卡如何進行最佳化網站
- Node效能如何進行監控以及最佳化?
- 在Linux中,如何進行系統資源的監控?Linux
- 在Linux中,如何進行系統資源的隔離?Linux
- 手把手教你釋出自己的開源庫到 Jcenter
- 手把手教你釋出自己的 cocoapods 開源庫
- 手把手教你釋出自己的cocoapods開源庫
- 教你如何進行 linux swap 交換記憶體擴容Linux記憶體
- TDengine 如何進行資料建模?
- 大資料如何進行分析大資料
- PMP資源最佳化技術:資源平衡、資源平滑
- 【雲棲大會】商業資料庫如何進行開源變革資料庫
- 無需一行程式碼就能搞定機器學習的開源神器——手把手教你配置使用行程機器學習
- 如何進行I/O評估、監控、定位和最佳化?
- 如何進行網站最佳化查詢,提升網站排名網站
- MongoDB資料庫手把手教你來學習MongoDB資料庫
- 手把手教你如何做資料包表
- 手把手教你寫VueRouterVue
- Android:手把手教你構建 WebView 的快取機制 & 資源預載入方案AndroidWebView快取
- 企業數字化轉型中應該如何進行資料資源規劃
- 大資料分析該如何進行大資料
- 一步步教你如何進行Xilinx SerDes除錯除錯
- 史上最強攻略!手把手教你建「資料中臺」!
- 手把手教你用ManagedSQLiteOpenHelper實現資料庫SQLite資料庫
- 手把手教你AspNetCore WebApi:資料驗證NetCoreWebAPI
- 手把手教你用Python進行迴歸(附程式碼、學習資料)Python
- 宜信開源|手把手教你建立第一個Davinci應用