圖片處理

圖片優(yōu)化

  • 及時解綁ImageView等和Bitmap的綁定里伯,也就是某個ImageView不再顯示了城瞎,就setImageBitmap(null),使得Bitmap的內(nèi)存對象能及時回收疾瓮,減少內(nèi)存占用脖镀。
  • 調(diào)用Bitmap的recycle方法,該方法標(biāo)記此內(nèi)存(本地堆內(nèi)存)可以被回收了狼电。
  • 在加載圖片時蜒灰,如果可能的話,捕獲OutOfMemory異常肩碟,并做相應(yīng)的處理(如:顯示默認(rèn)圖片)强窖,而不是直接崩潰。

使用BitmapFactory.Options優(yōu)化

  • 加載比原圖片縮略圖削祈,或者加載適合View大小的圖
  • 解碼時毕骡,使用Bitmap.Config降低圖片質(zhì)量
  • decodeStream直接調(diào)用 JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap岩瘦,也不使用java空間進(jìn)行分辨率適配未巫,雖節(jié)省dalvik內(nèi)存,但需要在hdpi和mdpi启昧,ldpi中配置相應(yīng)的 圖片資源叙凡,否則在不同分辨率機(jī)器上都是同樣大小(像素點(diǎn)數(shù)量)密末。其他方法如setImageBitmap握爷、setImageResource、 BitmapFactory.decodeResource在完成decode后严里,最終都是通過java層的 createBitmap來完成的新啼,需要消耗更多內(nèi)存。

使用LruCache緩存圖片

lru全稱為Least Recently Used刹碾,最近最少使用燥撞。
該類指定一個最大內(nèi)存,如果其中保存的對象超過最大內(nèi)存,則移除最近使用的對象物舒。
該類是線程安全的色洞,在重寫該類的方法時,為了保證線程安全冠胯,需要做一些同步工作火诸。該類,內(nèi)部使用的同步對象為this荠察。

擴(kuò)展LruCache
public LruCache (int maxSize)
// 不需要重寫置蜀。
// Runtime.getRuntime().maxMemory()方法獲取的是可用內(nèi)存的值
// maxSize參數(shù)的值可以根據(jù)實(shí)際情況參考上面的值來計(jì)算

protected V create (K key)
// 創(chuàng)建key對應(yīng)的對象
protected void entryRemoved (boolean evicted, K key, V oldValue, V newValue)
// 當(dāng)key對應(yīng)的對象被移除時,掉喲個該方法悉盆。
// 此時應(yīng)該釋放所占用的內(nèi)存盾碗。
protected int sizeOf (K key, V value)
// 返回指定對象所占用的內(nèi)存空間

DiskLruCache

public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize)
由于DiskLruCache的構(gòu)造方法是私有的,所以必須調(diào)用該方法來獲取實(shí)例舀瓢。

  • directory參數(shù):存儲的目錄
  • appVersion參數(shù):該應(yīng)用程序的版本,如果當(dāng)前版本和緩存時的版本不同耗美,則緩存被刪除
  • valueCount:表示同一個key對應(yīng)多少個緩存文件
  • maxSize:可以緩存的最大字節(jié)數(shù)

public Editor edit(String key)
調(diào)用該方法寫入緩存京髓。基本流程為:

  • 首先應(yīng)該在一個異步任務(wù)中執(zhí)行該流程商架。
  • 根據(jù)URL計(jì)算出key值堰怨,可以獲取它的摘要作為key。
  • 調(diào)用上面的方法
  • 從網(wǎng)絡(luò)下載
  • 如果下載成功蛇摸,調(diào)用Editor的commit方法
  • 如果下載失敗备图,調(diào)用Editor的abort方法

public synchronized Snapshot get(String key)
調(diào)用該方法得到緩存。

  • 首先應(yīng)該在一個異步任務(wù)中執(zhí)行該流程赶袄。
  • 調(diào)用上面的方法
  • 如果返回null揽涮,表示沒有緩存,則從網(wǎng)絡(luò)下載饿肺,并存入緩存蒋困,并返回對象
  • 如果不為null,直接返回
其他方法
public static String readFully(Reader reader)
public static String readAsciiLine(InputStream in)
public static void closeQuietly(Closeable closeable)
public static void deleteContents(File dir) 


public File getDirectory()
public synchronized long size() 
// 返回當(dāng)前大小
public long maxSize()
public synchronized boolean remove(String key) 
public void delete() 
// 關(guān)閉敬辣,并刪除該目錄下的所有文件
public synchronized void close()
public boolean isClosed() 
public synchronized void flush()
// 把操作同步到日志文件中

// Snapshot類
public Editor edit()
public InputStream getInputStream(int index)
public String getString(int index)
public void close() 

// Editor類
public InputStream newInputStream(int index)
public OutputStream newOutputStream(int index)
public String getString(int index)
public void set(int index, String value) 
public void commit() 
public void abort()

參考
http://blog.csdn.net/guolin_blog/article/details/28863651
http://blog.csdn.net/guolin_blog/article/details/34093441
http://blog.csdn.net/guolin_blog/article/details/28863651

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雪标,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溉跃,更是在濱河造成了極大的恐慌村刨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰茎,死亡現(xiàn)場離奇詭異嵌牺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門髓梅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拟蜻,“玉大人,你說我怎么就攤上這事枯饿≡凸” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵奢方,是天一觀的道長搔扁。 經(jīng)常有香客問我,道長蟋字,這世上最難降的妖魔是什么稿蹲? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鹊奖,結(jié)果婚禮上苛聘,老公的妹妹穿的比我還像新娘。我一直安慰自己忠聚,他們只是感情好设哗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著两蟀,像睡著了一般网梢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赂毯,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天战虏,我揣著相機(jī)與錄音,去河邊找鬼党涕。 笑死烦感,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膛堤。 我是一名探鬼主播啸盏,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骑祟!你這毒婦竟也來了回懦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤次企,失蹤者是張志新(化名)和其女友劉穎怯晕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缸棵,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舟茶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧凉。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡隧出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阀捅,到底是詐尸還是另有隱情胀瞪,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布饲鄙,位于F島的核電站凄诞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏忍级。R本人自食惡果不足惜帆谍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轴咱。 院中可真熱鬧汛蝙,春花似錦、人聲如沸朴肺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宇挫。三九已至,卻和暖如春酪术,著一層夾襖步出監(jiān)牢的瞬間器瘪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工绘雁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橡疼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓庐舟,卻偏偏與公主長得像欣除,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挪略,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • intent詳解(一)历帚、intent詳解(二) 1、獲取圖片 1杠娱、相冊以隱氏intent的方式打開系統(tǒng)默認(rèn)的圖庫挽牢,...
    i冰點(diǎn)閱讀 2,994評論 0 3
  • 高效加載大圖片 我們在編寫Android程序的時候經(jīng)常要用到許多圖片,不同圖片總是會有不同的形狀摊求、不同的大小禽拔,但在...
    咸魚Jay閱讀 204評論 0 1
  • 不夠堅(jiān)持自己總歸很艱辛,摒棄路途的不愉快,會想早年天真的自己睹栖,總還是會咧嘴笑的硫惕。 作家柒柒說過一句話:“一個人真的...
    伊憶何閱讀 214評論 0 0
  • 廚房里隱藏著奪命殺手梁只!這種劇毒致癌物就在你的身邊缚柳。也許你就已經(jīng)受到了它的侵害而不自知,20毫克可以直接致命搪锣。它就是...
    農(nóng)合優(yōu)品Sindy閱讀 331評論 0 0