我正在开发一个解码jpeg文件并使用canvas.drawBitmap()在画布上绘制位图的android应用程序。我正在使用BitmapFactory.decodeStream()将jpeg解码为位图。解码大位图时出现OutOfMemoryError
当我使用诸如2560x1536等分辨率的图像时,一切正常。最近,我做了一个压力测试,试图打开一个非常大的分辨率为5400x3600的jpeg。我的应用程序崩溃,错误为“java.lang.OutOfMemoryError”。
这里是堆栈跟踪:
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:720)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:696)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:734)
...
这是可以理解的,因为这是一个大的图像和解码的位图使用了大量的内存。
但是,我想了解的是在同一部手机上,如果使用图库应用程序,图库应用程序可以显示相同的大图像而不会有任何问题。
在同一部手机上,如果我还尝试用一些图片编辑工具打开相同的大图片,我认为它也应该将jpeg解码为位图,然后一切正常。这些应用需要多一点的时间才能显示图像,但图像会在屏幕上加载和绘制。
我想了解我可能做错了什么,与其他应用程序相比有什么不同?
你的答案就在这里[链接] {} https://stackoverflow.com/questions/25719620/how-to-solve-java-lang-outofmemoryerror-trouble-in-android –
是否将这些图像存储在可绘制的文件夹中? – Shruti
欢迎@RichardT –