Android內存管理-SoftReference的使用

Android內存管理-SoftReference的使用

  很多時候我們需要考慮Android平臺上的內存管理問題,Dalvik VM給每個進程都分配了一定量的可用堆內存,當我們處理一些耗費資源的操作時可能會產生OOM錯誤(OutOfMemoryError)這樣的異常,Android123觀察了下國內的類似Market客戶端設計,基本上都沒有采用很好的內存管理機制和緩存處理。
  如果細心的網友可能發現Android Market客戶端載入時,每個列表項的圖標是異步刷新顯示的,但當我們快速的往下滾動到一定數量比如50個,再往回滾動時可能我們看到了部分App的圖標又重新開始加載,當然這一過程可能是從SQLite數據庫中緩存的,但是在內存中已經通過類似SoftReference的方式管理內存。
  在Java中內存管理,引用分爲四大類,強引用HardReference、弱引用WeakReference、軟引用SoftReference和虛引用PhantomReference。它們的區別也很明顯,HardReference對象是即使虛擬機內存吃緊拋出OOM也不會導致這一引用的對象被回收,而WeakReference等更適合於一些數量不多,但體積稍微龐大的對象,在這四個引用中,它是最容易被垃圾回收的,而我們對於顯示類似Android Market中每個應用的App Icon時可以考慮使用SoftReference來解決內存不至於快速回收,同時當內存短缺面臨Java VM崩潰拋出OOM前時,軟引用將會強制回收內存,最後的虛引用一般沒有實際意義,僅僅觀察GC的活動狀態,對於測試比較實用同時必須和ReferenceQueue一起使用。
  對於一組數據,我們可以通過HashMap的方式來添加一組SoftReference對象來臨時保留一些數據,同時對於需要反覆通過網絡獲取的不經常改變的內容,可以通過本地的文件系統或數據庫來存儲緩存,希望給國內做App Store這樣的客戶端一些改進建議。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章