8

我知道关于内存不足的问题已经被问过了,但我没有找到解决方案

在位图工厂中,我出现内存不足异常,甚至使用

inSampleSize=1

所以我习惯用 try catch out of memory 异常来包围它,因为这是一种不好的做法

try{
   .........
   ......
}catch (OutOfMemoryError e)
            {}

内存不足异常也被捕获,但我的问题是在捕获这个异常之后我们应该

清除或重新分配 GC 的堆内存

有什么解决办法吗?

我用

System.gc();

没用请帮忙!!!!!!

not even Bitmap also for GridView Orientation 
i found this exception
Clamp target GC heap from 17.333MB to 16.000MB
Out of memory on a 140416-byte allocation.
4

1 回答 1

11

经过 3 天的努力,我找到了一个不增加堆内存的解决方案

我像这样替换我所有的 ImageView

<com.example.util.SingleShotImageView
                    android:id="@+id/grid_image"
                    android:layout_width="170dp"
                    android:layout_height="240dp"
                    android:adjustViewBounds="true"
                    android:layout_centerInParent="true"
                     />

使用此类我用来清除 onDetachedFromWindow 函数中的图像位图堆大小

public class SingleShotImageView extends ImageView {

    public SingleShotImageView(Context context) {
        super(context);
    }

    public SingleShotImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SingleShotImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDetachedFromWindow () {
        setImageDrawable(null);
        setBackgroundDrawable(null);
        setImageBitmap(null);
        System.gc();
    }

}

现在它工作正常,我的堆内存仍然存在

将堆(碎片情况)增加到 11.719MB 以分配 8192016 字节

于 2013-09-03T07:04:02.347 回答