ある種のローカルバックグラウンドを使用するアプリを開発しています。アイデアはこれを変更可能にすることです。私はこのコードを使用して「背景」を変更することができます。
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に対して同じことを行うにはどうすればよいですか?