偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Bitmap那些事之內(nèi)存占用計算和加載注意事項

移動開發(fā) Android
本來我是做電視應(yīng)用的,但是因為公司要出手機,人員緊張,所以就抽調(diào)我去支援一下,誰叫俺是雷鋒呢!大笑我做的一個功能就是處理手機中的應(yīng)用ICON,處理無非就是美化一下,重新與底板進(jìn)行合成和裁剪,用到了很多Bitmap的知識。

本來我是做電視應(yīng)用的,但是因為公司要出手機,人員緊張,所以就抽調(diào)我去支援一下,誰叫俺是雷鋒呢!大笑我做的一個功能就是處理手機中的應(yīng)用ICON,處理無非就是美化一下,重新與底板進(jìn)行合成和裁剪,用到了很多Bitmap的知識。本來之前一直想寫一些關(guān)于Bitmap的博客,正好這是個機會,因此Bitmap那些事系列博客誕生了。這個系列我會把學(xué)習(xí)Bitmap的一些知識發(fā)布出來供大家參考和交流。

在手機中圖片一般都是指Bitmap圖片,為什么要說Bitmap呢?因為大家在開發(fā)應(yīng)用的時候,都會使用一些圖片來表現(xiàn)UI,用戶也喜歡看圖片,看文字獲取信息太慢并且不直觀,如果美工設(shè)計的好,看圖片基本上不怎么看你的文字內(nèi)容就知道你要表達(dá)什么,例如所有的購物網(wǎng)站都會編輯很多商品的配圖來呈現(xiàn)給用戶,由此可見圖片在應(yīng)用程序中的常見和重要。只要說到圖片就不能離開如何避免OOM這個主題,因為在處理很多圖片時很容易出現(xiàn)OOM,那么學(xué)習(xí)圖片處理就顯得尤為重要了,下面就讓我們一步一步學(xué)習(xí)圖片的相關(guān)知識。

Bitmap圖片占用內(nèi)存計算:
Bitmap圖片在加載到內(nèi)存的時候是按照:寬*高*像素點位數(shù)來計算的。你可以把圖片看成是由width行、height列的矩陣組成,每一個矩陣元素代表一個像素點,每一個像素點都是1byte整數(shù)倍的數(shù)據(jù),這個數(shù)據(jù)越大,表示的色彩就越豐富,圖片的顯示質(zhì)量就越高。Bitmap中有一個枚舉類Config用來配置圖片的壓縮格式,代表每個像素是用多大的數(shù)據(jù)來存儲的,數(shù)值越大能夠存儲的顏色信息就越多,也就越豐富,顯示效果也就越好。Config.ALPHA_8是1 byte,Config.RGB_565和Config.ARGB_4444都是2 bytes,Config.RGB_565沒有Alpha值所以多用來配置沒有透明度的圖片,Config.ARGB_8888是4 bytes,一般圖片都是按照這個來配置的。下面是獲取配置的代碼:

  1. static int getBytesPerPixel(Config config) { 
  2.     if (config == Config.ARGB_8888) { 
  3.         return 4
  4.     } else if (config == Config.RGB_565) { 
  5.         return 2
  6.     } else if (config == Config.ARGB_4444) { 
  7.         return 2
  8.     } else if (config == Config.ALPHA_8) { 
  9.         return 1
  10.     } 
  11.     return 1

使用圖片你需要注意哪些:

1、android系統(tǒng)自身的問題。android系統(tǒng)給每一個應(yīng)用分配了一定的內(nèi)存空間,分配了多少要看廠家和機型,數(shù)值可以通過Runtime類獲取,Runtime.getRuntime()獲取實例,然后通過maxMemory()方法獲取系統(tǒng)可為APP分配的***內(nèi)存,totalMemory() 獲取APP當(dāng)前所分配的內(nèi)存heap空間大小,freeMemory()獲取當(dāng)前可用的內(nèi)存,當(dāng)被耗盡時會自動擴張,但是不會超過maxMemory。下圖為google官網(wǎng)提供的不同分辨率下不同的dpi分配的最小內(nèi)存;

2、需要多大的照片。很多圖片其實在手機上顯示的時候不需要完全把原圖加載到內(nèi)存中,比如我手機相機拍了一張照片是4208*3120的,加載到內(nèi)存中占用的內(nèi)存就是52M,這是很恐怖的,兩張照片差不多就把你的app內(nèi)存給耗光了。一般情況下你都需要對需要加載的圖片進(jìn)行處理,這個處理主要是減小圖片尺寸,降低分辨率,比如你的控件顯示就是100*100的大小,那你就要把圖片縮小到100*100。

3、及時釋放內(nèi)存。安卓2.3.3(API級別10)之前,Bitmap像素數(shù)據(jù)和Bitmap對象是分開存儲的,像素數(shù)據(jù)是存儲在native memory中,對象存儲在Dalvik heap中,native memory中的像素數(shù)據(jù)不是以一種可預(yù)見的方式釋放,可能導(dǎo)致應(yīng)用程序暫時超過其內(nèi)存限制和崩潰,所以在Android2.3.3(API 10)之前你必須要調(diào)用recycle()方法來釋放掉內(nèi)存避免出現(xiàn)OOM,當(dāng)然前提是確定這個bitmap不再使用,否則會出現(xiàn) "Canvas: trying to use a recycled bitmap". 在Android3.0(API 11)之后,Bitmap的像素數(shù)據(jù)和Bitmap對象一起存儲在Dalvik heap中,所以我們不用手動調(diào)用recycle()來釋放Bitmap對象,內(nèi)存的釋放都交給垃圾回收器來做。

以上是學(xué)習(xí)Bitmap的一些基礎(chǔ)知識和加載到手機內(nèi)存中需要注意的事項,下一篇博客我會寫如何更好的加載Bitmap,怎樣省內(nèi)存,怎樣高效。謝謝大家的瀏覽,寫的不好的地方和有任何疑問請留言或者更快的與我交流請?zhí)砑樱篶oder_online公眾號,這里不僅有我的文章,還有我的小伙伴們的,各種技術(shù)分享,不妨你來看看,我們期待你的到來。也可以掃描下面的二維碼,duang的一下就找到我們了。。。。。。。

責(zé)任編輯:chenqingxiang 來源: 博客園
相關(guān)推薦

2024-04-26 08:25:21

Bitmap內(nèi)存圖片

2011-07-25 17:48:10

iPhone 內(nèi)存

2011-06-29 09:56:29

QT UI 動態(tài)加載

2012-11-01 13:49:08

云實施SaaS數(shù)據(jù)中心

2011-07-21 15:40:24

iPhone 內(nèi)存管理 對象

2021-10-08 11:45:33

內(nèi)存HeapByteBuf堆內(nèi)

2009-12-15 17:47:17

VSIP

2011-05-26 11:22:04

SEO

2016-07-05 16:26:10

2010-02-05 14:13:17

Android平臺

2009-12-16 15:41:10

Ruby on Rai

2009-12-21 09:53:45

連接Oracle

2011-04-11 16:23:57

2010-05-07 10:19:48

Oracle 注意事項

2010-07-29 10:27:30

Flex鍵盤事件

2014-07-01 12:49:06

Android Stu安裝

2015-08-20 10:49:12

云計算數(shù)據(jù)加密

2012-02-06 10:19:22

云計算公共云私有云

2015-07-29 14:20:30

微信支付注意事項

2013-05-20 14:15:41

Fedora 18Vmware
點贊
收藏

51CTO技術(shù)棧公眾號