Я использую очень большие растровые изображения и храню данные в большом int [].Изображения могут быть очень большими, и я не могу их уменьшить (я получаю растровые изображения по проводам и отрисовываю их).
Проблема, с которой я сталкиваюсь, связана с очень большими растровыми изображениями (размер растрового изображения = 64 МБ), где я пытаюсь выделить массив int размером 16384000. Я тестирую это на Samsung Galaxy SII, у которого должно быть достаточно памяти, чтобы справиться с этим, но, похоже, есть «ограничение» на размер кучи.Метод Runtime.getRuntime().maxMemory()
возвращает 64 МБ, поэтому это максимальный размер кучи для данного конкретного устройства.
Уровень API установлен на 10, поэтому я не могу использовать атрибут android:largeHeap
, предложенный в другом месте (и я недаже не знаю, поможет ли это).
Есть ли способ выделить более 64 МБ?Я попытался выделить массив в нативном режиме (используя функцию JNI NewIntArray
), но это также не удалось.Кажется, что он ограничен тем же пределом, что и jvm.
Однако я мог бы выделить память на собственной стороне, используя NewDirectByteBuffer
, но, поскольку этот байтовый буфер не поддерживается массивом, я не могу получитьдоступ к int[]
(используя asIntBuffer().array()
в Java, который мне нужен для отображения изображения с использованием setPixels
или createBitmap
. Я думаю, OpenGL был бы подходящим вариантом, но у меня (пока) 0 опыта работы сOpenGL.
Есть ли способ как-то получить доступ к выделенной памяти как int [], который мне не хватает?