私が理解しているように(私が正しいというわけではありません)、ドローアブルは通常、アプリケーションが終了するとメモリから正しく削除されます。ただし、ビットマップは手動で再利用する必要があり、適切に処理するために特別なクラスが記述されている場合もあります。私の質問は、メモリとリークに関して、次のようなDrawables に固執する方が有益かということです。
myView.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image));
myView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image1));
myView2.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image2));
ビットマップのようなものではなく:
Bitmap tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
myView.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image1);
myView1.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image2);
myView2.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
もちろん、使用中に削除できるため、ビットマップの recycle() メソッドに注意する必要があることも読みましたか? これらの問題はさまざまな形で発生し続けているようですが、この問題について誰からも率直な回答を得ることができません. ある人はビットマップを再利用し、毎回使用後にリサイクルすると言い、他の人は Drawables と unbindDrawables() メソッドを使用すると言います (これは私が使用しているものです)。
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();
}
}
ただし、該当する洞察は大歓迎です。ありがとう