Android圖片的高效加載

如果高效的加載圖片闽瓢?

減少圖片占用過多的內(nèi)存資源埃跷,防止內(nèi)存溢出。在展示高分辨率圖片的時候邮利,最好先將圖片進(jìn)行壓縮弥雹;使用圖片緩存;

高分辨率圖片如何壓縮延届?

BitmapFactory這個類提供了多個解析方法(decodeByteArray, decodeFile,decodeResource等)用于創(chuàng)建Bitmap對象剪勿,我們應(yīng)該根據(jù)圖片的來源選擇合適的方法。比如SD卡中的圖片可以使用decodeFile方法方庭,網(wǎng)絡(luò)上的圖片可以使用decodeStream方法厕吉,資源文件中的圖片可以使用decodeResource方法。這些方法會嘗試為已經(jīng)構(gòu)建的bitmap分配內(nèi)存械念,這時就會很容易導(dǎo)致OOM出現(xiàn)头朱。為此每一種解析方法都提供了一個可選的BitmapFactory.Options參數(shù),將這個參數(shù)的inJustDecodeBounds屬性設(shè)置為true就可以讓解析方法禁止為bitmap分配內(nèi)存龄减,返回值也不再是一個Bitmap對象项钮,而是null。雖然Bitmap是null了希停,但是BitmapFactory.Options的outWidth烁巫、outHeight和outMimeType屬性都會被賦值。這個技巧讓我們可以在加載圖片之前就獲取到圖片的長寬值和MIME類型宠能,從而根據(jù)情況對圖片進(jìn)行壓縮亚隙。如下代碼所示:

圖片壓縮

通過設(shè)置BitmapFactory.Options中inSampleSize的值就可以實(shí)現(xiàn)圖片壓縮。下面的方法可以根據(jù)傳入的寬和高违崇,計算出合適的inSampleSize值:

計算壓縮比

使用下面這個方法阿弃,首先你要將BitmapFactory.Options的inJustDecodeBounds屬性設(shè)置為true,解析一次圖片亦歉。然后將BitmapFactory.Options連同期望的寬度和高度一起傳遞到到calculateInSampleSize方法中恤浪,就可以得到合適的inSampleSize值了。之后再解析一次圖片肴楷,使用新獲取到的inSampleSize值水由,并把inJustDecodeBounds設(shè)置為false,就可以得到壓縮后的圖片了赛蔫。

圖片壓縮

下面的代碼非常簡單地將任意一張圖片壓縮成100*100的縮略圖砂客,并在ImageView上展示泥张。

使用

如何緩存圖片?

內(nèi)存緩存技術(shù)對那些大量占用應(yīng)用程序?qū)氋F內(nèi)存的圖片提供了快速訪問的方法鞠值。其中最核心的類是LruCache (此類在android-support-v4的包中提供) 媚创。這個類非常適合用來緩存圖片,它的主要算法原理是把最近使用的對象用強(qiáng)引用存儲在 LinkedHashMap 中彤恶,并且把最近最少使用的對象在緩存值達(dá)到預(yù)設(shè)定值之前從內(nèi)存中移除钞钙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市声离,隨后出現(xiàn)的幾起案子芒炼,更是在濱河造成了極大的恐慌,老刑警劉巖术徊,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本刽,死亡現(xiàn)場離奇詭異,居然都是意外死亡赠涮,警方通過查閱死者的電腦和手機(jī)子寓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笋除,“玉大人斜友,你說我怎么就攤上這事≈旰叮” “怎么了蝙寨?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嗤瞎。 經(jīng)常有香客問我墙歪,道長,這世上最難降的妖魔是什么贝奇? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任虹菲,我火速辦了婚禮,結(jié)果婚禮上掉瞳,老公的妹妹穿的比我還像新娘毕源。我一直安慰自己,他們只是感情好陕习,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布霎褐。 她就那樣靜靜地躺著,像睡著了一般该镣。 火紅的嫁衣襯著肌膚如雪冻璃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音省艳,去河邊找鬼娘纷。 笑死,一個胖子當(dāng)著我的面吹牛跋炕,可吹牛的內(nèi)容都是我干的赖晶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辐烂,長吁一口氣:“原來是場噩夢啊……” “哼遏插!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纠修,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤涩堤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后分瘾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吁系,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年德召,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汽纤。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡上岗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕴坪,到底是詐尸還是另有隱情肴掷,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布背传,位于F島的核電站呆瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏径玖。R本人自食惡果不足惜痴脾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梳星。 院中可真熱鬧赞赖,春花似錦、人聲如沸冤灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韵吨。三九已至匿垄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背年堆。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工吞杭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人变丧。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓芽狗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痒蓬。 傳聞我的和親對象是個殘疾皇子童擎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容