【发布时间】:2016-11-12 00:27:32
【问题描述】:
我在使用裁剪库的一项活动中遇到加载位图图像的问题。如果图像大小超过 5 MB,我会收到内存不足错误...我已经尝试过
android:largeHeap="true"
但它并没有帮助我解决问题。我的 java 代码和 logcat 如下所示
Logcat:
07-09 21:10:47.482: E/art(4870): Throwing OutOfMemoryError "Failed to 分配 6391674 字节分配,6004224 空闲字节和 5MB 直到OOM” 07-09 21:10:47.482: D/AndroidRuntime(4870): 关闭虚拟机 07-09 21:10:47.522:E/AndroidRuntime(4870):致命异常:主要 07-09 21:10:47.522: E/AndroidRuntime(4870): 进程: com.karopass.status2017, PID: 4870 07-09 21:10:47.522: E/AndroidRuntime(4870): java.lang.OutOfMemoryError: 分配 6391674 字节失败 分配 6004224 个空闲字节和 5MB 直到 OOM 07-09 21:10:47.522: E/AndroidRuntime(4870): 在 java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122) 07-09 21:10:47.522: E/AndroidRuntime(4870): 在 com.karopass.status2017.material.ImageLoader.addToDiskCache(ImageLoader.java:238) 07-09 21:10:47.522: E/AndroidRuntime(4870): at com.karopass.status2017.material.ImageLoader.saveTempImage(ImageLoader.java:271)
我的 java 代码如下所示
public File addToDiskCache(String imageName, Bitmap inImage) {
Log.e("Add to Disk",imageName);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
if(!mCacheDir.exists()){
mCacheDir.mkdirs();
}
File filePath=new File(mCacheDir.getPath()+File.separator+imageName);
if(!filePath.exists()) {
try {
filePath.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
OutputStream os=null;
try {
os= new FileOutputStream(filePath.getPath());
os.write(bytes.toByteArray());
os.flush();
} catch (IOException e) {
Log.e("Write err",filePath.toString());
}finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Log.e("storage path",filePath.toString());
return filePath;
}
请帮我解决问题。
谢谢
【问题讨论】:
-
可能是你的位图太大或者不是这个方法造成的,检查你的其他代码,看看你是否忘记回收对象,尤其是位图。
标签: java android bitmap android-logcat