我正在Android设备的SD卡上下载一个相当大的文件(~60MB)。下载顺利,但我需要将此文件完整地提取到内存中。我知道这对智能手机来说是一个巨大的记忆,但我知道我的设备的数量是这个数字的两倍多。无论如何,我的实际问题是在将文件读入字节数组时得到OutOfMemoryError
。有没有办法为我的应用程序增加分配的内存,或某种方式“伪造”引用文件但是将文件保存在外部存储中而不将其加载到内部存储器中?
答案 0 :(得分:4)
Android中的每个虚拟机实例都具有所谓的VM预算。这基本上是整个应用程序可以占用的最大内存量,仅此而已。 getRuntime()。maxMemory()将为您提供当前实例的vm预算大小。
我认为预算可以从16MB(G1)到48MB(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 :(得分:1)
简单的答案是:你应该重新考虑你当前的设计。你能解释为什么需要将60mb的数据加载到内存中吗?