Android中Bitmap的加載和Canche總結(jié)篇

一:Bitmap的高效加載

BitmapFactory類(lèi)提供了四類(lèi)方法:decodeFile,decodeResource,decodeStream和decodeByteArray,分別用于支持從文件系統(tǒng)衫哥,資源,輸入流以及字節(jié)數(shù)組中加載出一個(gè)Bitmap對(duì)象笆搓,其中decodeFile和decodeResource又間接調(diào)用了decodeStream方法抱慌,這四類(lèi)方法最終是在Android的底層實(shí)現(xiàn)的宙暇,對(duì)應(yīng)著B(niǎo)itmapFactory類(lèi)的幾個(gè)native方法。

高效加載Bitmap核心思想就是采用BitmapFactory.Options來(lái)加載所需尺寸的圖片,例如通過(guò)ImageView顯示圖片房维,它并沒(méi)有原始圖片尺寸那么大,這時(shí)候沒(méi)必要把整個(gè)圖片加載進(jìn)來(lái)抬纸,ImageView并沒(méi)有辦法顯示原始的圖片咙俩。通過(guò)BitmapFactory.Options就可以按一定的采樣率來(lái)加載縮小后的圖片,這樣就會(huì)降低內(nèi)存占用,一定程度避免OOM阿趁,提高了Bitmap加載時(shí)性能膜蛔。

通過(guò)BitmapFactory.Options來(lái)縮放圖片,主要用到了它的inSampleSize參數(shù)脖阵,即采樣率皂股。當(dāng)inSampleSize為1時(shí),采樣后的圖片大小為圖片的原始大小命黔。當(dāng)大于1時(shí)呜呐,比如2,采樣后的圖片寬高均為原圖大小的1/2纷铣,而像素為原圖的1/4卵史,其占有的內(nèi)存大小也為原圖的1/4.。

如何獲取采樣率搜立?

1.將BitmapFactory.Options的inJustDecodeBounds參數(shù)設(shè)為true并加載圖片以躯。

2.從BitmapFactory.Options中取出圖片的原始寬高信息,它們對(duì)應(yīng)于outWidth和outHeight參數(shù)啄踊。

3.根據(jù)采樣率的規(guī)則并結(jié)合目標(biāo)View的所需大小計(jì)算出采樣率inSampleSize忧设。

4.將BitmapFactory.Options的inJustDecodeBounds參數(shù)設(shè)為false然后重新加載圖片。

inJustDecodeBounds參數(shù):此參數(shù)設(shè)為true時(shí)颠通,BitmapFactory只會(huì)解析圖片的原始寬高信息址晕,并不會(huì)去真正加載圖片,所以這個(gè)操作是輕量的顿锰。另外需要注意谨垃,這個(gè)時(shí)候BitmapFactory獲取的圖片寬高信息和圖片的位置以及程序運(yùn)行的設(shè)備有關(guān),比如在不同的drawable目錄下或者程序運(yùn)行在不同的屏幕密度的設(shè)備上硼控,都可能導(dǎo)致BitmapFactory獲取到不同的結(jié)果刘陶,這和Android的加載機(jī)制有關(guān)。

二:Android中的緩存策略

緩存策略沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)牢撼。主要包含緩存的添加匙隔,獲取和刪除操作。目前常用的一種緩存算法是LRU(Least Recently Used)核心思想是緩存滿是熏版,優(yōu)先淘汰近期最少使用的緩存對(duì)象纷责。

采用LRU算法的緩存有兩種:LruCache和DiskLruCache,LruCache用于實(shí)現(xiàn)內(nèi)存緩存撼短,DiskLruCache充當(dāng)了村粗設(shè)備緩存再膳。通過(guò)二者的完美結(jié)合,可以實(shí)現(xiàn)一個(gè)具有高實(shí)用價(jià)值的的ImageLoader.

LruCache:是一個(gè)泛型類(lèi)曲横,內(nèi)部采用一個(gè)LinkedHashMap以強(qiáng)引用的方式存儲(chǔ)外界的緩存對(duì)象喂柒,提供了get和put方法完成緩存的獲取和添加,當(dāng)緩存滿時(shí),LruCache會(huì)移除較早使用的緩存對(duì)象胳喷,然后再添加新的緩存對(duì)象。

關(guān)于強(qiáng)引用夭织,軟引用和弱引用的區(qū)別:強(qiáng)引用:直接的對(duì)象引用吭露。軟引用:當(dāng)一個(gè)對(duì)象只有軟引用存在時(shí),系統(tǒng)內(nèi)存不足時(shí)此對(duì)象會(huì)被gc回收尊惰。弱引用:當(dāng)一個(gè)對(duì)象只有弱引用存在時(shí)讲竿,此對(duì)象會(huì)隨時(shí)被gc回收。

DiskLruCache:用于實(shí)現(xiàn)存儲(chǔ)設(shè)備緩存弄屡,磁盤(pán)緩存题禀。它通過(guò)將緩存對(duì)象寫(xiě)入文件系統(tǒng)從而實(shí)現(xiàn)緩存的效果。DiskLruCache得到了Android官方文檔的推薦膀捷,但它不屬于Android SDK一部分迈嘹。




?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市全庸,隨后出現(xiàn)的幾起案子秀仲,更是在濱河造成了極大的恐慌,老刑警劉巖壶笼,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件神僵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡覆劈,警方通過(guò)查閱死者的電腦和手機(jī)保礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)责语,“玉大人炮障,你說(shuō)我怎么就攤上這事○谐铮” “怎么了铝阐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铐拐。 經(jīng)常有香客問(wèn)我徘键,道長(zhǎng),這世上最難降的妖魔是什么遍蟋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任吹害,我火速辦了婚禮,結(jié)果婚禮上虚青,老公的妹妹穿的比我還像新娘它呀。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布纵穿。 她就那樣靜靜地躺著下隧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谓媒。 梳的紋絲不亂的頭發(fā)上淆院,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音句惯,去河邊找鬼土辩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抢野,可吹牛的內(nèi)容都是我干的拷淘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼指孤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼启涯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恃轩,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逝嚎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后详恼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體补君,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年昧互,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挽铁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敞掘,死狀恐怖叽掘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玖雁,我是刑警寧澤更扁,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站赫冬,受9級(jí)特大地震影響浓镜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劲厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一膛薛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧补鼻,春花似錦哄啄、人聲如沸雅任。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沪么。三九已至,卻和暖如春锌半,著一層夾襖步出監(jiān)牢的瞬間成玫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工拳喻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猪腕。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓冗澈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陋葡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亚亲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354