2013-02-21 62 views
0

我正在維護一個包含大量圖像的大應用程序。我使用它的主要問題是應用程序崩潰,因爲它會產生內存錯誤。我正在嘗試使用SoftReferences和WeakReferences,我已經閱讀過它,但我不知道是否必須在Android類(如GridView,BaseAdapter或ImageView)中使用它們。如何在Android應用程序中使用Soft/WeakReference類?

我的應用程序有一個地圖與標記頂部有一個畫廊的活動。當我點擊一個氣球時,第二個活動出現在一個gridview中。

第一個活動,當我移動地圖時,活動重新加載庫中的所有標記和圖像,並添加新的標記和圖像。它具有以下屬性:

ShotButton shotButton; 畫廊畫廊; 列表圖片; private ImageView mMyLocationImage;

Dialog spinnerDialog; 

private GoogleMap map; 

private HashMap<String, Marker> identified_marker = new HashMap<String, Marker>(); 
private HashMap<Marker, DavinciImage> identified_XXX_images = new HashMap<Marker, XXXImage>(); 

private GalleryAdapter gallery_adapter; 

private AsyncTask<Poi, Void, Void> refresh_pois_async = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     ---- 
     new SoftReference<List<Object>>(XXXImages); 
     new WeakReference<HashMap<String, Marker>>(identified_marker); 
    new WeakReference<HashMap<Marker, XXXImage>>(identified_XXX_images); 
    } 

我的問題是,當我移動地圖,銷燬或暫停我做任何新的東西軟/ WeakReference的類來釋放內存的活動?我是否需要添加一個具有軟/弱引用類的新屬性,例如GalleryAdapter必須添加到soft/weakReference類中或系統爲我釋放這個內存?

第二個活動具有包含用戶所有圖像的gridview。我在進入活動時加載所有數據,並在活動需要時加載圖像。我在這個活動中有以下幾點。

ImageView     mUserImage; 
public String    myApplicationUserId; 
public GridAdapter   imageAdapter = null; 
public GridView    gridview  = null; 
public ImageLoader_Profile mImageLoaderMedium; 


--- 
gridview.setScrollingCacheEnabled(true); 
gridview.setFriction(10); 

--- 
new WeakReference<ImageLoader_Profile>(mImageLoaderMedium); 

ImageLoader_Profile負責管理圖像的加載。

public class ImageLoader_Profile{ 

    MemoryCache      memoryCache = new MemoryCache(); 
    private Map< ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap< ImageView, String>()); 

    public ImageLoader_Profile(Context context, Bitmap canvas, int deviceDensity) { 

     ....   
     new SoftReference<MemoryCache>(memoryCache); 
     new SoftReference<Map<ImageView,String>>(imageViews); 
    } 

這就是我需要做的一切,或者在這種情況下我必須做任何其他軟參考?我有點困惑。

回答

1

你不應該軟弱參考緩存了。

由於Android 2.3,軟弱引用緩存系統無效而改變了垃圾收集過程。

現在,你應該使用LruCache,這是一個好:)

如何使用LruCache?試試這個

Caching Bitmaps

+1

是的,我知道,但我保持這個程序,現在我沒有時間去改變它。那麼,當我應該使用軟弱引用來釋放以上信息的內存?而且,我是否需要在GridView,Adapters或ImageView中使用軟弱引用? – beni 2013-02-21 10:05:36

相關問題