加载位图时出现内存不足错误 [英] Out of Memory Error while loading bitmaps

查看:26
本文介绍了加载位图时出现内存不足错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含 3 个活动的 Android 应用:

i have an android app with 3 acitivtys:

A1 --开始--> A2 --开始--> A3 --当他的进程结束时:开始-->A1

A1 --starts--> A2 --starts--> A3 --when finished his process: starts--> A1

(所以我不会完成();"一个应用程序.我在用户交互后的整个时间都用startActivity(..);"开始下一个活动)

(so i don't "finish();" an app. i start the next activitys with "startActivity(..);" the whole time after userinteraction)

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

so there is a loop in these 3 activitys. On each Activity, i display 3-9 pictures, located on the SD-card, which i load with my following function:

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;
}

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

This all works. But sometimes (after looping a few times through my activitys), my app crashes..

Logcat 告诉我:

Logcat tells me:

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)

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

Someone can give my some tips how to handle the crashes? Maybe its because my activitys are set to state "paused" instead of closing them correctly?

推荐答案

为了快速修复,您可以添加

for quick fix you can add

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

android:largeHeap="true" in your manifest application tag

此处链接:

我的桌子在kindle和nook中遇到了OOM问题

I face OOM problem for my table in kindle and nook

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

提到使用更大的堆的规范此处链接:

there specification is mentioned to use larger heap link here:

使用缓存位图技术link这里

这篇关于加载位图时出现内存不足错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆