在我的 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());
}
}
}
我怎样才能使这项工作?我已经检查了内存泄漏,但没有...