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