Android內(nèi)存溢出OutOfMemoryError

最近做android的項目,碰到一個下載圖片并顯示的需求篮绰,當下載的圖片較多時后雷,出現(xiàn)OutOfMemoryError的異常。

試了好多優(yōu)化方式吠各,最后發(fā)現(xiàn)是因為圖片比較大時臀突,bitmap分配內(nèi)存溢出問題。最后總結了一下走孽,優(yōu)化的方式有下面幾種:

1惧辈、不用的bitmap要及時回收銷毀

??? bitmap.recycle();bitmap= null;

2、顯示調(diào)用system.gc();觸發(fā)垃圾回收磕瓷,及時回收內(nèi)存盒齿。

3、stream轉(zhuǎn)換為bitmap時壓縮圖片質(zhì)量

??? 我的問題是BitmapFactory.decodeStream(stream)這個方法報的錯誤困食,錯誤信息是OutOfMemoryError边翁。

??? 也就是說stream轉(zhuǎn)換為bitmap的時候內(nèi)存不夠。下面是我的解決方案:

??? BitmapFactory.Options options = new BitmapFactory.Options();

??? options.inJustDecodeBounds = true;

??? Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options);

??? int imageHeight = options.outHeight;

??? int imageWidth = options.outWidth;

??? if(imageWidth > 200)

??? {

??????? int maxpix = imageHeight > imageWidth ? imageHeight : imageWidth;

??????? int scale = (int) (maxpix / 100);

??????? if (scale <= 0)

??????? {

??????????? scale = 1;

??????? }

??????? options.inSampleSize = scale;

??? }

??? options.inJustDecodeBounds = false;

??? stream = image.getImageViewInputStream(imageUrl);//重新讀取stream

??? bitmap = BitmapFactory.decodeStream(stream,null,options);


??? 屬性inJustDecodeBounds設置為true時,返回的bitmap為空硕盹,只是讀取圖片信息符匾,

??? 并不使用內(nèi)存讀取bitmap,當inJustDecodeBounds設置為false時,讀取bitmap,

??? 這之前必須重新讀一下stream。

4瘩例、壓縮圖片的其他方式

??? 1> 按寬高比縮放

??? public static Bitmap zoomImage(Bitmap bgimage, double newWidth,? double newHeight) {

??? // 獲取這個圖片的寬和高

??? float width = bgimage.getWidth();

??? float height = bgimage.getHeight();

??? // 創(chuàng)建操作圖片用的matrix對象

??? Matrix matrix = new Matrix();

??? // 計算寬高縮放率

??? float scaleWidth = ((float) newWidth) / width;

??? float scaleHeight = ((float) newHeight) / height;

??? // 縮放圖片動作

??? matrix.postScale(scaleWidth, scaleHeight);

??? Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,

??? (int) height, matrix, true);

??? return bitmap;

??? }

2> 壓縮大小最大100k

??? public static Bitmap GetPressBitmap(Bitmap bitMap)

??? {

??? double maxSize = 100;

??? //將bitmap放至數(shù)組中啊胶,意在bitmap的大械楦鳌(與實際讀取的原文件要大)

??? ByteArrayOutputStream baos = new ByteArrayOutputStream();

??? bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

??? byte[] b = baos.toByteArray();

??? //將字節(jié)換成KB

??? double mid = b.length/1024;

??? //判斷bitmap占用空間是否大于允許最大空間? 如果大于則壓縮 小于則不壓縮

??? if (mid > maxSize) {

??????? //獲取bitmap大小 是允許最大大小的多少倍

? ? ? ? double i = mid / maxSize;

?? ? ?? //開始壓縮? 此處用到平方根 將寬帶和高度壓縮掉

? ?? ?? //對應的平方根倍 (1.保持刻度和高度和原bitmap

? ?? ?? //比率一致,壓縮后也達到了最大大小占用空間的大醒嫫骸)

? ?? ?? bitMap = zoomImage(bitMap, bitMap.getWidth() / Math.sqrt(i),

? ?? ?? bitMap.getHeight() / Math.sqrt(i));

??? }

??? return bitMap;

??? }

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趣倾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子某饰,更是在濱河造成了極大的恐慌儒恋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黔漂,死亡現(xiàn)場離奇詭異诫尽,居然都是意外死亡,警方通過查閱死者的電腦和手機炬守,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門牧嫉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劳较,你說我怎么就攤上這事驹止。” “怎么了观蜗?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衣洁。 經(jīng)常有香客問我墓捻,道長,這世上最難降的妖魔是什么坊夫? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任砖第,我火速辦了婚禮,結果婚禮上环凿,老公的妹妹穿的比我還像新娘梧兼。我一直安慰自己,他們只是感情好智听,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布羽杰。 她就那樣靜靜地躺著,像睡著了一般到推。 火紅的嫁衣襯著肌膚如雪考赛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天莉测,我揣著相機與錄音颜骤,去河邊找鬼。 笑死捣卤,一個胖子當著我的面吹牛忍抽,可吹牛的內(nèi)容都是我干的八孝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸠项,長吁一口氣:“原來是場噩夢啊……” “哼干跛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锈锤,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤驯鳖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后久免,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浅辙,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年阎姥,在試婚紗的時候發(fā)現(xiàn)自己被綠了记舆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡呼巴,死狀恐怖泽腮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衣赶,我是刑警寧澤诊赊,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站府瞄,受9級特大地震影響碧磅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遵馆,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一鲸郊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧货邓,春花似錦秆撮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至复隆,卻和暖如春拨匆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挽拂。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工惭每, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓台腥,卻偏偏與公主長得像宏赘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黎侈,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

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