Android Bitmap

Bitmap

1.Bitmap使用需要注意哪些問題耀鸦?

  • 參考回答:
    • 要選擇合適的圖片規(guī)格(bitmap類型):通常我們優(yōu)化Bitmap時技肩,當(dāng)需要做性能優(yōu)化或者防止OOM并闲,我們通常會使用RGB_565,因?yàn)锳LPHA_8只有透明度玩裙,顯示一般圖片沒有意義,Bitmap.Config.ARGB_4444顯示圖片不清楚晰绎,Bitmap.Config_ARGB_8888占用內(nèi)存最多。
      • ALPHA_8每個像素占用1byte內(nèi)存
      • ARGB_4444每個像素占用2byte內(nèi)存
      • ARGB_8888每個像素占用4byte內(nèi)存(默認(rèn))
      • ARGB_565每個像素占用2byte內(nèi)存
    • 降低采樣率:BitmapFactory.Options 參數(shù)inSampleSize的使用括丁,先把option.inJustDecodeBounds設(shè)為true荞下,只是去讀取圖片的大小,在拿到圖片的大小之后和要顯示的大小做比較通過calculateInSampleSize()函數(shù)計(jì)算inSampleSize的具體值,得到值之后尖昏。option.inJustDecodeBounds設(shè)為false讀圖片資源仰税。
    • 復(fù)用內(nèi)存:即通過軟引用(內(nèi)存不夠的時候才會回收掉),復(fù)用內(nèi)存塊抽诉,不需要再重新給這個bitmap申請一塊新的內(nèi)存陨簇,避免了一次內(nèi)存的分配和回收,從而改善運(yùn)行效率迹淌。
    • 使用recycle()方法及時回收內(nèi)存河绽。
    • 壓縮圖片。

2唉窃、Bitmap.recycle()會立即回收么耙饰?什么時候會回收?如果沒有地方使用這個Bitmap纹份,為什么垃圾回收不會直接回收苟跪?

參考回答:

  • 通過源碼可以了解到,加載Bitmap到內(nèi)存里以后矮嫉,是包含兩部分內(nèi)存區(qū)域的削咆。簡單的說,一部分是java部分的蠢笋,一部分是C部分的拨齐。這個Bitmap對象是由Java部分分配的,不用的時候系統(tǒng)就會自動回收了昨寞。
  • 但是那個對應(yīng)的C可用的內(nèi)存區(qū)域瞻惋,虛擬機(jī)是不能直接回收的,這個只能調(diào)用一下系統(tǒng)的垃圾回收器進(jìn)行回收援岩,調(diào)用System.gc()并不能保證立即開始進(jìn)行回收過程歼狼,而只是為了加快回收的到來。

3享怀、一張Bitmap所占用內(nèi)存以及內(nèi)存占用的計(jì)算

參考回答:

  • Bitmap所占內(nèi)存大小 = 寬度像素 X (inTargetDensity / inDensity) X 高度像素 X (inTargetDensity / inDensity) X 一個像素所占的內(nèi)存字節(jié)大小羽峰。
    • 注:這里inDensity表示圖標(biāo)圖片的dpi(放在哪個資源文件下),inTargetDensity表示目標(biāo)屏幕的dpi,所以你可以發(fā)現(xiàn)inDensity 和 inTargetDensity會對Bitmap的寬高進(jìn)行拉伸添瓷,進(jìn)而改變Bitmap占用內(nèi)存大小梅屉。
    • 在Bitmap 里有兩個獲取內(nèi)存占用大小的方法。
      • getByteCount(): API12 加入鳞贷,代表存儲Bitmap 的像素需要的最小內(nèi)存坯汤。
      • getAllocationByteCount():API19 加入,代表在內(nèi)存中為 Bitmap 分配的內(nèi)存大小搀愧,代替了getByteCount()方法惰聂。
      • 在不復(fù)用Bitmap時疆偿,getByteCount()和getAllocationByteCount返回結(jié)果是一樣的。在通過復(fù)用Bitmap來解碼圖片時搓幌,那么getByteCount()表示新解碼圖片占用內(nèi)存的大小杆故,getAllocationByteCount()表示被復(fù)用Bitmap真實(shí)占用內(nèi)存的大小。

4.Android中緩存更新策略鼻种?

參考回答:

  • Android 的緩存更新策略沒有統(tǒng)一的標(biāo)準(zhǔn)反番,一般來說,緩存策略主要包含緩存的添加叉钥、獲取和刪除這三類操作罢缸,但不管是內(nèi)存緩存還是存儲設(shè)備緩存,他們緩存容量是有限制的投队,因此刪除一些舊緩存并添加新緩存枫疆,如何定義緩存的新舊就是一種策略,不同策略就對應(yīng)不同的緩存算法敷鸦。
  • 比如簡單地根據(jù)文件的最后修改時間來定義緩存的新舊息楔,當(dāng)緩存滿時就將最后修改時間較早的緩存移除,這就是一種緩存算法扒披,但不算很完美值依。

5、LRU的原理碟案?

參考回答:

  • 為減少流量消耗愿险,可采用緩存策略。常用的緩存算法是LRU(least Recently Used):當(dāng)緩存滿時价说,會優(yōu)先淘汰那些近期最少使用的緩存對象辆亏。主要是兩種方式:
  • LruCache(內(nèi)存緩存):LruCache類是一個線程安全的泛型類:內(nèi)部采用一個LinkedHashMap以強(qiáng)引用的方式存儲外界的緩存對象,并提供get和put方法來完成緩存的獲取和添加操作鳖目,當(dāng)緩存滿時會移除早使用的緩存對象扮叨,再添加新的緩存對象。
  • DiskLruCache(磁盤緩存):通過將緩存對象寫入文件系統(tǒng)從而實(shí)現(xiàn)緩存效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末领迈,一起剝皮案震驚了整個濱河市彻磁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狸捅,老刑警劉巖衷蜓,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異薪贫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刻恭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門瞧省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扯夭,“玉大人,你說我怎么就攤上這事鞍匾〗幌矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵橡淑,是天一觀的道長构拳。 經(jīng)常有香客問我,道長梁棠,這世上最難降的妖魔是什么置森? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮符糊,結(jié)果婚禮上凫海,老公的妹妹穿的比我還像新娘。我一直安慰自己男娄,他們只是感情好行贪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著模闲,像睡著了一般建瘫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尸折,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天啰脚,我揣著相機(jī)與錄音,去河邊找鬼翁授。 笑死拣播,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的收擦。 我是一名探鬼主播贮配,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塞赂!你這毒婦竟也來了泪勒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤宴猾,失蹤者是張志新(化名)和其女友劉穎圆存,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仇哆,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沦辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讹剔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油讯。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡详民,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陌兑,到底是詐尸還是另有隱情沈跨,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布兔综,位于F島的核電站饿凛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏软驰。R本人自食惡果不足惜涧窒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碌宴。 院中可真熱鬧杀狡,春花似錦、人聲如沸贰镣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碑隆。三九已至恭陡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間上煤,已是汗流浹背休玩。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劫狠,地道東北人拴疤。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像独泞,于是被迫代替她去往敵國和親呐矾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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