2013-02-07 76 views
0

我正試圖在android中實現圖像庫。 基於http://www.mobisoftinfotech.com/blog/android/android-gallery-widget-example-and-tutorial/的代碼,我改變了一些細節。內存泄漏圖像庫Android

我使用WeakReference,看起來,當我有太多的位圖時,垃圾收集器破壞我的弱引用。我該如何處理?

我通過此功能,讓我的位圖:

public static WeakReference<Bitmap> getBitmap(String imageName, int width, 
     int height) { 
    String pathToImage = getPathToImage(imageName); 
    Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(pathToImage, options); 

    /* 
    * Calculate inSampleSize 
    */ 
    options.inSampleSize = calculateInSampleSize(options, width, height); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 

    WeakReference<Bitmap> scaledBitmap = new WeakReference<Bitmap>(
      BitmapFactory.decodeFile(pathToImage, options)); 
    return scaledBitmap; 
} 

,我已經採取了分辨率320x480的解決方案,所以我想是不是這個大...

當畫廊已超過300圖片,其中一些不顯示。

畫廊教程不是很好嗎?是否有其他方法來實現這一點?

謝謝!

回答

1

而不是使用軟引用的,你應該看看lrucache類(它成爲蜂窩推出,但Android的支持庫的一部分

你可以閱讀更多關於它在這裏:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html 這是非常方便的:使用這個,你將不必處理內存與弱引用:-)

+0

感謝您的意見!現在我沒有內存泄漏了,但仍然有問題顯示位圖高效...(不重新加載每次我改變當前位圖:([見](http://stackoverflow.com/questions/14775940/)內存泄漏 - 圖像畫廊 - 安卓 - 如何 - 其他 - 應用程序 - 處理它)) – Frame91

+0

只是要確定:你是否從互聯網上下載圖像?或者你是否使用預先打包的圖像? – Redwarp

+0

當我打開畫廊,圖像在我的磁盤上;)(之前下載過) – Frame91