編輯:關於Android編程
1、內存溢出的原因
1.1、內存洩漏
內存洩漏和內存溢出的區別:
內存洩漏:程序中存在對無用對象的引用,導致GC無法回收。內存洩漏最終會導致oom。
內存溢出:程序在申請內存時,沒有足夠的內存空間供其使用,出現outofmemory。
1.2、保存多個耗用內存過大的對象
應用的某些邏輯操作消耗掉大量內存(譬如加載一張不經過處理的超大超高清圖片等)導致超過阈值。
2、內存優化
2.1、bitmap
1)對bitmap進行壓縮
通過BitmapFactory.Options設置inSampleSize采樣率,並設置inJustDecodeBounds為true後圖片就不會加載進內存,只是計算原始圖片的大小,在對圖片壓縮處理完成之後,在設置為false就可以加載到內存了。
2)對bitmap進行回收
Bitmap對象不再被使用的時候,調用Bitmap.recycle()方法來釋放Bitmap占用的內存空間,並進行空引用,以便gc進行回收。
3)bitmap進行緩存
Bitmap緩存分為兩種:一種是內存緩存,一種是硬盤緩存。
內存緩存(LruCache):
LruCache類是非常適合用作緩存Bitmap任務的,它將最近被引用到的對象存儲在一個強引用的LinkedHashMap中,並且在緩存超過了指定大小之後將最近不常使用的對象釋放掉。
2.2、修改對象引用類型
引用類型:
引用分為四種級別,這四種級別由高到低依次為:強引用>軟引用>弱引用>虛引用。
1)強引用(strongreference)
如:Objectobject=newObject(),object就是一個強引用了。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足問題。
2)軟引用(SoftReference)
只有內存不夠時才回收,常用於緩存;當內存達到一個閥值,GC就會去回收它;
3)弱引用(WeakReference)
弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。
4)虛引用(PhantomReference)
"虛引用"顧名思義,就是形同虛設,虛引用並不會決定對象的生命周期。如果一個對象僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。
但是對於SoftReference(軟引用)或者WeakReference(弱引用)的Bitmap緩存方案,現在已經不推薦使用了。自Android2.3版本(APILevel9)開始,垃圾回收器更著重於對軟/弱引用的回收。
2.3、適配器Adapter
1)復用用convertview
復用convertview布局文件的渲染次數,因為每次調用getView時都會重新創建View,這樣之前的View可能還沒有銷毀,加之不斷的新建View勢必會造成內存洩露;
2)使用ViewHoder模式
使用viewhoder可以減少findviewbyid的次數,因為通過setTag將視圖的tag存入一個數據結構,這個數據結構包含了指向我們要綁定數據的視圖的引用;
2.4、其他
1)盡量少食用enmu
枚舉相對於靜態常量來說,需要兩倍甚至更多的內存.
2)資源釋放
使用數據庫,IO流的時候記得關閉資源.
Android基礎入門教程——9.4 使用MediaRecord錄音標簽(空格分隔): Android基礎入門教程本節引言 本節是Android多
最近在做項目,小組幾個回了家。界面暫時沒人做,用到自定義對話框只能臨時去學。現在把對話框的相關整理。 +
在res下新建一個文件夾,命名為anim,創建xml文件,例如創建了一個a1.xml //在這裡寫動畫 alpha:漸變透明度效果 rotate:旋轉動
第十八章、代理模式 代理模式也稱委托模式,是結構型設計模式之一。是應用廣泛的模式之一。1.定義為其他對象提供一種代理以控制對這個對象的訪問。2.使用場景當無法或不想直接訪