Насколько я понимаю (не то, что я прав) Drawables обычно корректно удаляются из памяти, когда приложение завершает работу с ними.Однако растровые изображения необходимо перерабатывать вручную, а иногда даже иметь специальный класс, написанный для правильной обработки. Мой вопрос в отношении памяти и утечек: выгоднее ли просто придерживаться 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();
}
}
Любое применимое понимание было бы оченьценится хотя.Спасибо