招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學(xué)習(xí)專區(qū) > 安卓技術(shù) > 深圳嘉華安卓開教程之Bitmap內(nèi)存占用計(jì)算

深圳嘉華安卓開教程之Bitmap內(nèi)存占用計(jì)算

2016-09-22 10:40:57
來源:北大青鳥深圳嘉華學(xué)校
[導(dǎo)讀] 這里北大青鳥深圳嘉華學(xué)校為安卓程序員們搜羅了一些關(guān)于安卓開發(fā)中內(nèi)存優(yōu)化的技術(shù)點(diǎn),這里要分享的是安卓開發(fā)中Bitmap內(nèi)存占用計(jì)算的問題。首先我們來了解一下手機(jī)中圖片一般都是指Bitmap圖片,為什么要說Bitmap呢?因?yàn)榇蠹以陂_發(fā)應(yīng)用的時(shí)候,都會使用一些圖片來表現(xiàn)UI,用戶也喜歡

這里北大青鳥深圳嘉華學(xué)校為安卓程序員們搜羅了一些關(guān)于安卓開發(fā)中內(nèi)存優(yōu)化的技術(shù)點(diǎn),這里要分享的是安卓開發(fā)中Bitmap內(nèi)存占用計(jì)算的問題。

首先我們來了解一下手機(jī)中圖片一般都是指Bitmap圖片,為什么要說Bitmap呢?因?yàn)榇蠹以陂_發(fā)應(yīng)用的時(shí)候,都會使用一些圖片來表現(xiàn)UI,用戶也喜歡看圖片,看文字獲取信息太慢并且不直觀,如果美工設(shè)計(jì)的好,看圖片基本上不怎么看你的文字內(nèi)容就知道你要表達(dá)什么。

下面就讓我們一步一步學(xué)習(xí)圖片的相關(guān)知識。

Bitmap圖片在加載到內(nèi)存的時(shí)候是按照:寬*高*像素點(diǎn)位數(shù)來計(jì)算的。你可以把圖片看成是由width行、height列的矩陣組成,每一個(gè)矩陣元素代表一個(gè)像素點(diǎn),每一個(gè)像素點(diǎn)都是1byte整數(shù)倍的數(shù)據(jù),這個(gè)數(shù)據(jù)越大,表示的色彩就越豐富,圖片的顯示質(zhì)量就越高。Bitmap中有一個(gè)枚舉類Config用來配置圖片的壓縮格式,代表每個(gè)像素是用多大的數(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,一般圖片都是按照這個(gè)來配置的。下面是獲取配置的代碼:

深圳嘉華安卓開教程之Bitmap內(nèi)存占用計(jì)算

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

1、Android系統(tǒng)自身的問題。

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

深圳嘉華安卓開教程之Bitmap內(nèi)存占用計(jì)算
深圳嘉華安卓開教程之Bitmap內(nèi)存占用計(jì)算

2 、需要多大的照片。

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

3、及時(shí)釋放內(nèi)存。

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

以上是學(xué)習(xí)Bitmap的一些基礎(chǔ)知識和加載到手機(jī)內(nèi)存中需要注意的事項(xiàng)。

評論
相關(guān)文章
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
免费国产一级aⅴ片 | 在线看日本中文字幕不卡 | 亚洲乱码中文字幕综合视频 | 午夜福利欧美一区在线观看 | 亚洲婷婷丁香五月综合图 | 日韩精品一区二区五月婷 |