dalvik虛擬機會為應用程式分配固定大小的heap ,如果使用超過了這個heap的大小,且沒有可被**物件,就會報oom。多張較大會迅速占用空間造成oom。
我們可以使用一下的方法來減少這種情況的產生:
1.減少單張的大小,根據螢幕大小來對bitmap做resize。
private void setimagesrc(imageview imageview, string imagepath)
private static int image_max_width = 480;
private static int image_max_height = 960;
private static int getimagescale(string imagepath)
return scale;}
2.使用軟快取來儲存bitmap,在記憶體不足時虛擬機器可快速**。
3.在manifest裡配置android:largeheap="true"
同是我們在使用viewpager的時候至少需要同是載入兩個bitmap物件,我們可以使用fragment來作為viewpager裡的item,然後在onpause方法裡把非當前bitmap乾掉,然後在onresume裡把當前bitmap拿出來。
又比如需求需要crop後和原圖同是存在的情況下,我們無法同是儲存兩個bitmap物件,因此我們可以使用自定義控制項的方法來解決,重寫imageview的onlayout以及ondraw方法來實現。通過onlayout方法得到bitmap的width和height,然後重寫ondraw方法為:
if (mbitmap != null && mwidth != 0 && mheight != 0) else
rect rectdst = new rect(0 + mpadding, 0 + mpadding, mwidth - mpadding, mheight - mpadding);
canvas.drawcolor(mcolor);
canvas.drawbitmap(mbitmap, rectsrc, rectdst, null);
} else
super.ondraw(canvas);
too many open files問題解決辦法
今天用 往liunx中寫檔案,檔案很多 執行一會就日誌上就報錯 too many open files 結果找了半天才解決這個問題,現在給大家分享一下。首先用 ulimit a 命令看看linux的open files值是多少,結果乙隻有1024,不夠用的。然後修改linux的配置檔案,修改 etc...
haoop問題解決
1.namenode不能啟動 cannot lock storage tmp dfs name.the directory is already locked.上網查了查,基本上有兩個辦法 1.重新格式化namenode 2.許可權問題 chown r hadoop hadoop tmp dfs n...
SVPullToRefresh問題解決
今天在使用svpulltorefresh時發現當資料太少時,重新整理的時候同時進行了上拉和下拉重新整理,現解決方法如下 解決辦法 1 開啟iuiscrollview svinfinitescrolling.m 2 然後找到第194行,void scrollviewdidscroll cgpoint ...