Android 使用位图递归打开许多活动

Android 使用位图递归打开许多活动,android,bitmap,Android,Bitmap,我的应用程序有一个问题:在我的应用程序中,每个活动都有几个ImageView,每个ImageView都设置了一个位图。如果递归打开许多活动,分配的内存将不断增加,最后MemoryCache已满,因此我无法显示任何位图,否则应用程序将崩溃 对于活动已停止的ImageView,我可以做什么?我是否可以回收其位图,并在其活动恢复后重新加载位图 我正在使用Fresco处理位图加载和缓存。在使用位图对象时处理内存的最佳方法是使用LruCache并将位图存储在内存中。 一旦您不再需要位图,您可以将其存储到缓

我的应用程序有一个问题:在我的应用程序中,每个活动都有几个ImageView,每个ImageView都设置了一个位图。如果递归打开许多活动,分配的内存将不断增加,最后MemoryCache已满,因此我无法显示任何位图,否则应用程序将崩溃

对于活动已停止的ImageView,我可以做什么?我是否可以回收其位图,并在其活动恢复后重新加载位图


我正在使用Fresco处理位图加载和缓存。

在使用位图对象时处理内存的最佳方法是使用LruCache并将位图存储在内存中。 一旦您不再需要位图,您可以将其存储到缓存中并回收,以释放尽可能多的内存。如果它存储在缓存中,您只需从缓存中获取图像

这是我处理缓存的班级:

public class ImagesCache {
private  LruCache <String, Bitmap> imagesWarehouse;
private static ImagesCache cache;

public static ImagesCache getInstance() {
    if(cache == null)
        cache = new ImagesCache();
    return cache;
}

public void initializeCache() {
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    imagesWarehouse = new LruCache<String, Bitmap>(cacheSize) {
        protected int sizeOf(String key, Bitmap value) {
            // The cache size will be measured in kilobytes rather than number of items.
            int bitmapByteCount = value.getRowBytes() * value.getHeight();

            return bitmapByteCount / 1024;
        }};
}

public void addImageToWarehouse(String key, Bitmap value) {       
    if (imagesWarehouse != null && imagesWarehouse.get(key) == null)
        imagesWarehouse.put(key, value);
}

public Bitmap getImageFromWarehouse(String key) {
    if (key != null)
        return imagesWarehouse.get(key);
    else
        return null;
}

public void removeImageFromWarehouse(String key) {
    imagesWarehouse.remove(key);
}

public void clearCache() {
    if (imagesWarehouse != null)
        imagesWarehouse.evictAll();
}
并在应用程序完成时清除

cache.clearCache()

换句话说:我在使用位图时遇到了OOMException,但我试图表现得更聪明,没有提到这一点,因为这样的问题会被标记为duplicate@SyedRaza Mehdi我想知道的是:对于那些活动已停止的位图,我能做些什么,例如活动A启动活动B,现在,A已停止,无法看到。在这种情况下,我可以为A的ImageView设置空位图,并在A返回时加载位图。我是新来的,对不起,我的英语很差,我正在做这项工作。我的问题是:如何处理那些活动被停止的位图例如,它的活动开始另一个活动
cache.clearCache()