OutOfMemoryError при загрузке большого количества данных в Android - PullRequest
2 голосов
/ 30 июня 2011

Я загружаю довольно большой файл на SD-карту устройства Android (~ 60 МБ).Загрузка идет нормально, но мне нужно полностью вытащить этот файл в память.Я знаю, что это огромный кусок памяти для смартфона, но я знаю, что мое устройство имеет более чем в два раза больше.В любом случае, моя настоящая проблема в том, что я получаю OutOfMemoryError при чтении файла в байтовый массив.Есть ли способ увеличить выделенную память для моего приложения или какой-то способ «подделать» ссылку на файл, но сохранить файл во внешнем хранилище без загрузки его во внутреннюю память?

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Каждый экземпляр виртуальной машины в Android имеет то, что они называют бюджетом виртуальной машины. В основном это максимальный объем памяти, который может занимать все приложение, и ничего более. getRuntime (). maxMemory () предоставит вам размер бюджета виртуальной машины для вашего текущего экземпляра.

Бюджет может варьироваться от 16 МБ (G1) до 48 МБ (Moto Xoom), я думаю. Эти цифры могут отличаться, так как я пытаюсь вспомнить все, что у меня на голове.

Обычно для чего-то подобного вы считываете данные как InputStream и обрабатываете данные так, как вы их читаете, но не сохраняете сами данные.

Если это растровое изображение. Вы можете использовать ...

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; // Divides the width and height each by 4 when reading the data in.
Bitmap bitmap = BitmapFactory.decodeFile(String "filePath", options);
Bitmap bitmap = BitmapFactory.decodeStream(InputStream "fileStream", options);
1 голос
/ 30 июня 2011

Простой ответ: вы должны действительно пересмотреть свой текущий дизайн.Не могли бы вы объяснить, почему вам необходимо загрузить 60 МБ данных в память?

...