【问题标题】:Android BitmapDrawable recycling/re-useAndroid BitmapDrawable 回收/再利用
【发布时间】:2012-12-30 16:06:50
【问题描述】:

在下面的代码中,我有两个位图(我省略了创建它们的代码,因为这与我的问题无关)并且我的布局中还有一个 ImageView。我让 ImageView 将第一个位图显示为可绘制对象,然后使其显示第二个位图,再次作为可绘制对象。

我知道位图可以回收,我的问题与“新 BitmapDrawable”部分有关,因为我无法弄清楚 BitmapDrawable 到底是什么。它只是一个参考还是每次创建时都会占用内存?换句话说,在我为 bitmap2 创建另一个 BitmapDrawable 之前,我为 bitmap1 创建的 BitmapDrawable 是否需要删除/回收?

谢谢。

Bitmap bitmap1,bitmap2;

...assume bitmap1 and bitmap2 contain valid bitmaps...

// get imageview
ImageView iv = (ImageView)findViewById(R.id.my_imageview);

// make the imageview display bitmap1
iv.setImageDrawable(new BitmapDrawable(getResources(),bitmap1));        

// now make the imageview display bitmap2
iv.setImageDrawable(new BitmapDrawable(getResources(),bitmap2));        

【问题讨论】:

  • 只是出于好奇:如果您可以将位图直接设置为ImageView,为什么还要创建BitmapDrawable?请参阅ImageView.setImageBitmap(Bitmap)。如果你真的需要Drawable,我会考虑使用StateListDrawable,如果你更喜欢两个图像之间的淡入淡出效果,我会考虑使用TransitionDrawable
  • 谢谢,我试试看。

标签: android bitmap


【解决方案1】:

您应该在需要时保留位图。创建新位图的成本很高。如果没有足够的内存可用,GC 将触发,您的应用将在这段时间内停止。

查看此内容以有效地显示位图 http://developer.android.com/training/displaying-bitmaps/index.html

【讨论】:

  • 我很清楚这一点,但这与我的问题没有任何关系。我不是在询问位图,而是专门询问可绘制对象。它们不是一回事。
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 2014-11-09
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多