0

在我的 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 方法中的可绘制对象来修复它,对吧?好吧,不...我的 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());
            }
        }
    }

我怎样才能使这项工作?我已经检查了内存泄漏,但没有...

4

0 回答 0