成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Bitmap內存占用優化的關鍵:圖片分辨率、文件夾存放和加載策略

移動開發 Android
雖然不同分辨率下的inDensity數值是不同的,但只要設計師是按照規范切的圖,那么不同分辨率圖片之間的寬高縮放比例=inDensity之間的比例。 所以最終不同分辨率的圖片在同一設備上展示時,圖片寬高縮放后得到的最終值是一致的,內存也就一致了。

圖片內存占用計算公式

  1. 圖片分辨率 = a*b  比如:180*120
  2. 圖片存放的文件夾對應的dpi,比如hdpi是240,xhdpi是320dpi,我們定位為變量inDensity
  3. 手機設備的dpi,這個值取決于每臺手機,比如我的小米是440dpi (這個值并不是手機分辨率的平方之和 ,開根號,再除以手機尺寸,這個展示分辨率取決于廠商的算法), 我們定義為targetDensity
  4. 圖片縮放比例scale= targetDensity/inDensity,每個像素點的內存大小pointMemory ,取決于色深,比如argb8888的色深就是32個bit位=4byte
  5. 圖片占用內存=(圖片寬a*scale+0.5)*(圖片高b*scale+0.5)*pointMemory

同一張圖片,展示在不同分辨率手機上,內存占用大小一致嗎?

不一致。因為inDensity的數值一致,但targetDensity的數值不一致,所以圖片的縮放比例不同,占用內存自然不同.

同一手機設備加載不同分辨率文件夾下的同一圖片,內存占用大小一致嗎?

一致。雖然不同分辨率下的inDensity數值是不同的,但只要設計師是按照規范切的圖,那么不同分辨率圖片之間的寬高縮放比例=inDensity之間的比例。 所以最終不同分辨率的圖片在同一設備上展示時,圖片寬高縮放后得到的最終值是一致的,內存也就一致了。

ImageView控件的大小會影響內存占用大小嗎?

不會。因為通過src屬性,我們在獲取對應的drawable時,設置的density為0,density為0的情況下,圖片的寬高是不會進行任何的縮放的,故而占用內存大小也不會有任何的改變。 內存占用大小=圖片原始寬*圖片原始高*色深

同一個資源id,通過BitmapFactory創建的bitmap和xml文件中ImageView設置的src,占用內存是否一致?

會有不一致的場景。如果inDensity和targetDensity不一致,那么通過BitmapFactory創建的bitmap會進行縮放,從而導致內存大小!=圖片原始寬*圖片原始高*色深。而xml通過src屬性設置的圖片,因為density=0的原因,圖片不會進行任何的縮放,內存占用大小=圖片原始寬*圖片原始高*色深

三方圖片加載框架設置圖片大小,是否會影響圖片占用內存?

會。三方框架設置圖片大小的操作本質,是修改圖片的寬高,圖片的寬高變了,占用內存大小自然也就變了

Android圖片適配的規則

先找手機設備dpi對應的drawable文件夾,如果當前文件夾找不到,策略是優先圖片縮小。 所以會接著去找高分辨率下文件夾有沒有這張圖片,高分辨率都沒有的情況下,會接著從低分辨文件夾中查找.

比如:手機設備dpi為320(xhdpi),如果在drawable-xhdpi文件中找不到對應圖片,則接著去drawable-xxhdpi、drawable-xxxhdpi文件夾中查找,如果依然沒有找到,則去drawable-hdpi、drawable-mdpi下查找。

為什么建議圖片要放在正確的分辨率文件夾下?

只針對手機設備的分辨率是xxhdpi做分析,其余分辨率自行思考,targetDensity=480

分辨率是xxhdpi的圖片,放在正確的drawable-xxhdpi文件夾下。 inDensity=480,targetDensity=480,圖片縮放比例 scale=1

分辨率是xxhdpi的圖片,放在錯誤的drawable-xhdpi文件夾下。 inDensity=320,targetDensity=480,圖片縮放比例scale=1.5

內存大小從width*height*pointMemeory變成了(width*1.5+0.5)*(height*1.5+0.5)*pointMemory,導致占用的內存增加了許多。

一個dpi為320的手機設備,加載一張drawable-xxxhdpi下的圖片,占用的內存和加載一張drawable-xhdpi下的圖片一樣嗎?

當然一樣,加載高分辨率圖片時,圖片是會縮小的,圖片大小會縮放到和其他分辨率一致,故而占用內存大小是一致的

既然我們手機加載不同分辨率目錄下的同一圖片,占用內存大小都是一致的,那為什么還要創建多個drawable目錄呢?直接使用drawable-xxxhdpi,豈不是還可以縮小包體積?

這里涉及到一個問題,就是xml文件中我們使用ImageView控件,直接通過src屬性引用圖片資源的場景。

而通過xml文件引用圖片資源,占用的內存大小如下: 因為通過src屬性,我們在獲取對應的drawable時,設置的density為0,density為0的情況下,圖片的寬高是不會進行任何的縮放的,故而占用內存大小也不會有任何的改變。內存占用大小=圖片原始寬*圖片原始高*色深

所以如果我是320的手機,我加載xhdpi下的圖片,假設圖片是18*12 argb8888,那內存占用就是18*12*4,但如果我只在xxxhdpi下有圖片,假設圖片是36*24,那內存占用就是36*24*4,內存占用一下就翻了4倍。而我們drawable目錄下的圖片,幾乎都是用于xml引用圖片,很少會用bitmapFactory創建,所以還是每個文件夾下都放對應分辨率的圖片是最好的。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2015-04-16 10:41:34

Bitmap

2014-08-07 15:06:45

Android設備分辨率

2024-09-05 11:48:33

2017-04-10 09:17:08

神經網絡分辨率像素遞歸

2014-10-15 14:58:50

iPhone6iOS 8分辨率

2017-05-04 21:15:30

Android分辨率

2013-08-13 11:09:10

android分辨率

2021-01-20 11:14:47

人工智能算法技術

2013-09-16 16:56:09

AndroidBitmap內存優化

2017-06-13 12:57:42

Windows 10Windows分辨率

2011-08-16 17:57:51

linux修改分辨率

2011-05-30 08:42:56

Android

2021-09-14 14:02:40

手機內存技術

2012-01-05 16:08:57

佳能激光打印機

2024-07-05 10:41:30

目標檢測算法

2009-11-27 13:03:42

SUSE FAQ修改X

2013-05-21 14:15:23

Android游戲開發屏幕分辨率

2011-09-08 17:40:05

ubuntu分辨率

2013-10-16 16:58:17

iOS優化緩存優化

2011-05-05 17:29:23

掃描儀
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品国产毛片 | av入口 | 成人免费观看网站 | 福利一区在线观看 | 亚洲在线免费 | 成人在线精品视频 | 日本人和亚洲人zjzjhd | 久久精品亚洲精品国产欧美 | 久久人人网 | 国产免费视频在线 | 国产亚洲一区二区三区在线观看 | 日本特黄a级高清免费大片 特黄色一级毛片 | 在线观看免费国产 | 欧美一级免费看 | 国产又色又爽又黄又免费 | 在线观看成年人视频 | 狠狠艹| 免费一级欧美在线观看视频 | www日本在线观看 | 国产亚洲精品久久久优势 | 日本理论片好看理论片 | 成人av看片 | 国产欧美一区二区精品久导航 | 亚洲精品久 | 精品国产乱码久久久久久久久 | 中文字幕一区二区三区在线观看 | 在线成人av | 精品视频一区二区三区在线观看 | 一级欧美| 亚洲最大的黄色网址 | 久久一久久 | 无码国模国产在线观看 | 久久久国产精品一区 | 黄色一级大片在线免费看产 | 日韩精品一区二区三区在线播放 | 亚洲精品66| 色呦呦网站 | 国产最好的av国产大片 | www国产亚洲精品 | 在线免费观看黄a | 久久一|