我正在开发一个使用一种本地背景的应用程序。我们的想法是让它变得可变。我设法使用此代码更改“背景”。
Bitmap bMap = BitmapFactory.decodeFile(sharedPreferences.getString("PICTURE", ""));
Drawable d =new BitmapDrawable(bMap);
bac.setBackgroundDrawable(d);
}
问题是每次我返回“背景屏幕”时,应用程序都会因为 OutOfMemoryError 而崩溃。然后它显示新的背景。我需要某种使应用程序不会崩溃的代码。我在 ImageView 中做到了这一点,但在 LinearLayout 中没有。对于 ImageView,我使用以下代码:
Bitmap bMap = BitmapFactory.decodeFile(sharedPreferences.getString("PICTURE", ""));
image.setImageBitmap(bMap);
为了避免它崩溃:
@Override
protected void onPause() {
super.onPause();
unbindDrawables(findViewById(R.id.iv_pic));
System.gc();
}
private void unbindDrawables(View view) {
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));
}
((ViewGroup) view).removeAllViews();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindDrawables(findViewById(R.id.iv_pic));
System.gc();
}
我如何为 LinearLayout 做同样的事情?