LruCache не хранит растровое изображение в kotlin Android - PullRequest
0 голосов
/ 04 октября 2019

Я просто пытаюсь кэшировать растровое изображение в LruCache HashMap, выполняя это:

private lateinit var cacheStock: LruCache<String, Bitmap>
private lateinit var cacheStock: LruCache<String, Bitmap>
var maxCacheSize: Int = (Runtime.getRuntime().maxMemory() / 1024).toInt() / 8

   //Default Max Cache Size
    var maxCacheSize: Int = MemoryUtils().getVMCacheSize() / 8

    cacheStock = object : LruCache<String, Bitmap>(maxCacheSize) {

        override fun sizeOf(key: String?, value: Bitmap): Int {
            //returns bytecount in a bitmap
            return value.getByteCount() / 1024;
        }
    }

    imageView.setImageResource(R.drawable.placeholder);

    var bitmapdrawable:BitmapDrawable;
    bitmapdrawable= imageView.drawable as BitmapDrawable;

    cacheStock.put("11",bitmapdrawable.bitmap);
    cacheStock.put("12",bitmapdrawable.bitmap);
    cacheStock.put("13",bitmapdrawable.bitmap);


    cacheStock.get("11");
    cacheStock.get("12");
    cacheStock.get("13");

Но cacheStock не сохраняет в нем пары ключ-значение. Он всегда имеет размер 0 даже после добавления в него растрового изображения. Я также хочу знать, является ли LruCache постоянной памятью? Пожалуйста, предложите, где я делаю ошибку.

1 Ответ

0 голосов
/ 04 октября 2019

Вставка Bitmap в него не удалась, когда value!!.byteCount / 1024 оценивается как ноль. Если вы введете достаточно большое значение Bitmap, оно будет работать и с текущим кодом.

Необходимо убедиться, что sizeOf() никогда не вернет 0. Один из простых способов сделать это - работать с байтами, а не с килобайтами. Просто удалите оба ваших / 1024 деления, и код заработает.

...