【发布时间】:2015-08-18 00:03:08
【问题描述】:
我正在尝试读取文件以便通过 Wear 应用程序发送它,但我得到了 OutOfMemory 异常。
File file = new File(filePath);
final FileInputStream fileInputStream = new FileInputStream(file);
byte fileContent[] = new byte[(int) file.length()]; //***BOMBS HERE***
fileInputStream.read(fileContent);
fileInputStream.close();
Asset programDataAsset = Asset.createFromBytes(fileContent);
异常说明如下:
java.lang.OutOfMemoryError: Failed to allocate a 31150467 byte allocation with 2097152 free bytes and 16MB until OOM
at com.rithmio.coach.wear.TransferService.sendAssetToMobile(TransferService.java:110)
at com.rithmio.coach.wear.TransferService.onHandleIntent(TransferService.java:84)
at com.rithmio.coach.wear.TransferService$1.run(TransferService.java:60)
at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
-
解决方法是按固定大小的块进行读写。
-
如果他只是增加堆呢?他并不是要发送 1 GB 的数据,30 MB 也不算多。
-
我通常发现,如果您的程序需要增加 jvm 内存分配,您可能最好使用其他解决方案。毕竟,这是一个便携性问题——尤其是对于可穿戴设备。谁知道消费者真正拥有多少内存?
-
更不用说这可能在堆空间有限的移动设备上
标签: java out-of-memory wear-os android-wear-data-api