Как освободить большую память для работы с растровыми изображениями после использования, если этого не произошло? - PullRequest
0 голосов
/ 08 февраля 2020

Я начинающий android программист и хочу реализовать список с RecyclerView, который может содержать любой носитель. Если размер изображения, загружаемого в мое приложение, большой, я хочу уменьшить его. Для этого я нашел код:

Bitmap bitmap = BitmapFactory.decodeFile(path);
Bitmap smallerBitmap = ThumbnailUtils.extractThumbnail(bitmap, bitmap.getWidth() / 8, bitmap.getHeight() / 8));

В первой строке я читаю изображение в моем телефоне, а во второй строке делаю его меньше. Для его написания я использую эту часть кода:

try (FileOutputStream out = new FileOutputStream(finalMyFile)) {
     smallerBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
} catch (IOException e) {
     e.printStackTrace();
}

Эти два процесса для больших изображений требуют около 1008 * памяти в оперативной памяти в течение 1-2 секунд. Но моя проблема здесь в том, что иногда после завершения этих процессов память освобождает, а иногда не освобождает. Я делал этот процесс разными способами, но моя проблема не решалась. Я сделал это с Handler или Thread. Мое приложение не имеет проблем и продолжает работать, но мне не нравится это для моего приложения.

У вас есть идеи?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы должны перерабатывать свое растровое изображение после того, как каждый процесс должен быть убит.

Вы можете использовать

bitmap.recycle();

bitmap = null;

0 голосов
/ 03 марта 2020

Вы можете использовать это https://square.github.io/leakcanary/, чтобы найти ответ

...