Я использую
Drawable drawable = res.getDrawable(id);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
drawable.setBounds(0,0, width, height);
drawable.draw(canvas);
return load(bitmap, linear);
для загрузки отрисовки из идентификатора ресурса в OpenGL с заданной шириной и высотой. (Использование
android.opengl.GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
)
Функция load выполняет GL-вызовы, а также вызывает bitmap.recycle ().
Я сам задаю ширину и высоту, потому что Android будет соответствовать разрешению с размером экрана, который мне не нужен.
Теперь моя проблема (эта часть работает нормально):
если я запускаю свое приложение в первый раз из Android Studio, все работает; ОДНАКО, если я хочу перезапустить его, он падает из-за OutOfMemoryError. Я делаю одинаковые звонки в обоих случаях.
Я обнаружил, что проблема заключается в управлении ресурсами Android, как вы можете видеть из анализа кучи:
мои самые дорогие ассигнования
Размер моих изображений в натуральном выражении меньше 9 МБ (512x512, RGBA, поэтому 1 МБ).
Как я могу запретить Android хранить эти большие байтовые массивы, которые, вероятно, подразумеваются как некий кеш; который, однако, не запускается при первом запуске после установки приложения?
Я тестирую на Android 6.0.1, API версии 23, Galaxy S5.