使用高分辨率图像会出现BITMAP错误?

时间:2013-06-29 05:21:45

标签: android image bitmap out-of-memory

我创建了一个仅包含ImageViews的应用程序。

另外根据应用程序要求,我必须使用1024 * 780分辨率通过200 * 250分辨率图像的高质量图像。所有图像总计近45张图像!!!。

在高端(堆内存> = 32)设备中,我发现它正在顺利运行,即将进入低端(堆内存< 32)设备&同样在MICROMAX A 65上,我收到了一些Crashing Reports&我尝试了一个16mb的堆内存仿真器。

点击第一张图片后显示:

06-29 05:16:28.572: W/dalvikvm(846): threadid=1: thread exiting with uncaught exception     (group=0x40a70930)
06-29 05:16:28.665: E/AndroidRuntime(846): FATAL EXCEPTION: main
06-29 05:16:28.665: E/AndroidRuntime(846): java.lang.OutOfMemoryError
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.content.res.Resources.loadDrawable(Resources.java:1965)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.content.res.Resources.getDrawable(Resources.java:660)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.widget.ImageView.resolveUri(ImageView.java:616)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.widget.ImageView.setImageResource(ImageView.java:349)
06-29 05:16:28.665: E/AndroidRuntime(846):  at com.mshah.learnandplaybasiccolors.Learn.setImageWithSound(Learn.java:123)
06-29 05:16:28.665: E/AndroidRuntime(846):  at com.mshah.learnandplaybasiccolors.Learn.onClick(Learn.java:88)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.view.View.performClick(View.java:4202)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.view.View$PerformClick.run(View.java:17340)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.os.Handler.handleCallback(Handler.java:725)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.os.Looper.loop(Looper.java:137) 
06-29 05:16:28.665: E/AndroidRuntime(846):  at android.app.ActivityThread.main(ActivityThread.java:5039)
06-29 05:16:28.665: E/AndroidRuntime(846):  at java.lang.reflect.Method.invokeNative(Native Method)
06-29 05:16:28.665: E/AndroidRuntime(846):  at java.lang.reflect.Method.invoke(Method.java:511)
06-29 05:16:28.665: E/AndroidRuntime(846):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-29 05:16:28.665: E/AndroidRuntime(846):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-29 05:16:28.665: E/AndroidRuntime(846):  at dalvik.system.NativeStart.main(Native Method)

我没有使用Bitmap,它给出了位图错误:我该如何解决这个错误?

我应该排除对此类设备的支持吗?

2 个答案:

答案 0 :(得分:2)

您不应同时将所有这些图像加载到内存中。你为什么这样?您应该根据需要在这些行和延迟加载中创建一些缩略图或其他内容。没有办法解决这个问题。即使在高端设备上,你也会以你正在进行的方式运行内存不足,因为android只能为你提供一个非常小的内存占用空间。

答案 1 :(得分:0)

Managing bitmap memory

这个文档对位图问题有很大帮助。