不少時候咱們須要考慮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這樣的客戶端一些改進建議。異步