使用高分辨率的图像会产生BITMAP错误



我创建了一个仅由ImageViews组成的应用程序。

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

在高端(堆内存>=32)设备中,我发现它运行得很顺利,来到低端(堆内存<32)设备&同样在MICROMAX A65上,我收到了一些碰撞报告&我尝试了一个16mb堆内存Emulator。

点击第一张图片后,它显示:

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)

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

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

您不应该同时将所有这些图像加载到内存中。你为什么要?您应该创建一些缩略图库或类似的东西,并根据需要进行延迟加载。这是没有办法的。你会用你现在的方式加载图像,即使是在高端设备上,内存也会用完,因为android只会给你一个很小的内存空间来操作。

管理位图内存

这个文档在位图问题上帮助很大。

最新更新