android - 加载位图时出现内存不足错误

标签 android bitmap out-of-memory

我有一个具有 3 个 Activity 的 android 应用程序:

A1 --开始--> A2 --开始--> A3 --当完成他的过程时:开始--> A1

(所以我不会“finish();”一个应用程序。我在用户交互后的整个时间内都使用“startActivity(..);”开始下一个 Activity )

所以这 3 个 Activity 中有一个循环。 在每个 Activity 中,我显示 3-9 张图片,位于 SD 卡上,我使用以下功能加载:

try
{
    Uri selectedImageURI = Uri.parse(strImagePath);
    File imgFile = new  File(getRealPathFromURI(selectedImageURI, c));
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    ivTmp.setImageBitmap(myBitmap);
}catch (Exception e)
{
    return null;
}

这一切都有效。 但有时(在我的 Activity 循环几次之后),我的应用程序崩溃了..

Logcat 告诉我:

01-16 13:42:15.863: DEBUG/dalvikvm(23161): GC_BEFORE_OOM freed 10K, 9% free 59019K/64400K, paused 29ms, total 30ms
01-16 13:42:15.863: ERROR/dalvikvm-heap(23161): Out of memory on a 8018704-byte allocation.
01-16 13:42:15.863: ERROR/AndroidRuntime(23161): FATAL EXCEPTION: main
        java.lang.OutOfMemoryError
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
        at android.content.res.Resources.loadDrawable(Resources.java:1965)
        at android.content.res.Resources.getDrawable(Resources.java:660)
        at android.widget.ImageView.resolveUri(ImageView.java:616)
        at android.widget.ImageView.setImageResource(ImageView.java:349)
        at <MyApp>.MyActivity$6.run(MyActivity.java:143)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5039)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)

有人可以给我一些如何处理崩溃的提示吗? 也许是因为我的 Activity 设置为“暂停”而不是正确关闭它们?

最佳答案

您可以添加快速修复

android:largeHeap="true" 在您的 list 应用程序标签中

link here:

我在 kindle 和 nook 的 table 上遇到 OOM 问题

Heap size (large)
android:largeHeap="true"

提到了使用更大堆的规范link here:

编辑:使用缓存位图技术link here

关于android - 加载位图时出现内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359024/

相关文章:

Android DataBinding "??"符号和来自资源的参数化字符串。如何避免 'null' 文本?

java - Android SQLite - 删除并重新创建具有相同表名的表时出现错误列

c# - 无法通过链接在 Release模式下构建我的项目

java - 安卓设置壁纸出错

安卓 HttpEntityUtils OutOfMemoryException

android - 限制android map 标记拖动到折线

c# - 跨类库传递 System.Drawing.Bitmap 不可靠吗?

c - GDI 单色位图在每次创建 HBITMAP 时翻转位

android - 在 Android 中显示来自 SD 卡的大图像

java - 如何安全地读取可能是二进制的文本文件?