如何進行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
- 超實用!手把手教你如何3步進行Web滲透測試!Web
- 手把手教你入門Hadoop(附程式碼&資源)Hadoop
- Spark如何進行動態資源分配Spark
- 手把手教你用Python進行迴歸(附程式碼、學習資料)Python
- 手把手教你用DGL框架進行批次圖分類框架
- 手把手教你用DGL框架進行批量圖分類框架
- 手把手教你在Modelarts平臺上進行視訊推理
- 手把手教你如何做資料包表
- Java實戰:教你如何進行資料庫分庫分表Java資料庫
- 教你用SQL進行資料分析SQL
- 教你如何進行Prometheus 分片自動縮放Prometheus
- 教你如何進行SSH無密碼訪問密碼
- 手把手教你用Python的Prophet庫進行時間序列預測Python
- 手把手教你如何破解付費MacAppMacAPP
- 手把手教你如何實現繼承繼承
- Node效能如何進行監控以及最佳化?
- 網站開啟卡如何進行最佳化網站
- 在Linux中,如何進行系統資源的監控?Linux
- 在Linux中,如何進行系統資源的隔離?Linux
- 教你如何使用Zabbix3.4進行Web監測Web
- 手把手教你如何配置騰訊雲CDN?
- 手把手教你釋出自己的開源庫到 Jcenter
- 杜絕浪費 教你如何快速清理Docker資源Docker
- 在Linux中,如何在Linux中進行資源配額管理?Linux
- 教你如何進行數倉字串、二進位制、十六進位制互轉字串
- 教你如何用鐵威馬NAS進行遠端下載?
- 手把手教你AspNetCore WebApi:資料驗證NetCoreWebAPI
- 手把手教你實現一個 Vue 進度條元件!Vue元件
- 如何滾動截圖長圖?手把手教你
- BI專案實施完成,不知道怎麼進行測試?Smartbi手把手教你!
- PMP資源最佳化技術:資源平衡、資源平滑
- 教你如何進行 linux swap 交換記憶體擴容Linux記憶體
- 馳騁股市!手把手教你如何用Python和資料科學賺錢?Python資料科學
- Smartbi手把手教你如何搭建企業大資料BI平臺系統大資料
- MongoDB資料庫手把手教你來學習MongoDB資料庫