我正在一个Android设备的SD卡上下载一个相当大的文件(~60MB)。下载过程很顺利,但我需要将这个文件全部拉入内存。我知道这对于智能手机来说是一个巨大的内存,但我知道我的设备有超过两倍的内存。不管怎样,我的实际问题是在将文件读入字节数组时得到一个OutOfMemoryError。有没有什么方法可以增加为我的应用程序分配的内存,或者有什么方法可以“伪造”引用该文件,而不将其加载到内部内存中而将其保存在外部存储中?

最佳答案

android中的每个虚拟机实例都有他们称之为vm预算的东西。这基本上是整个应用程序所能占用的最大内存量,而不是更多。getruntime().maxmemory()将为您提供当前实例的虚拟机预算大小。
我认为预算可以从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);

10-07 15:45