布局背景占用了所有内存

时间:2012-08-20 17:27:29

标签: java android memory-leaks drawable

在我的Android应用中,我有一个背景布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/menu_background"
    android:id="@+id/frame"
    >
...

背景图片为png(ldpi为240x400,mdpi为320x480等)

我尝试使用jpg,但看起来很糟糕,所以将其切换回png。

当我更改方向时,它可以正常工作几次,然后应用程序强制关闭抛出以下错误:

dalvikvm-heap(16260): 148960-byte external allocation too large for this process.
VM won't let us allocate ... bytes

java.lang.RuntimeException: Unable to start activity ComponentInfo...

所以,我以为我可以通过解开onDestroy方法中的drawable来解决它,对吧? 好吧,不...我的onDestroy中有以下方法:

@Override
    protected void onDestroy() {
        super.onDestroy();

        unbindDrawables(findViewById(R.id.frame));

        Runtime.getRuntime().gc();
    }

    private void unbindDrawables(View view) {
        if(view==null)
            return;
        if (view.getBackground() != null) {
            view.getBackground().setCallback(null);
        }
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
            }
            try{
                ((ViewGroup) view).removeAllViews();
            }catch(UnsupportedOperationException mayHappen) {
                Log.e("Error:", mayHappen.getMessage());
            }
        }
    }

我该如何使这项工作?我已经检查了内存泄漏,但没有...

0 个答案:

没有答案