【发布时间】:2012-01-15 15:09:43
【问题描述】:
我正在开发一个应用程序,它会实例化一堆位图对象(例如按钮,它们具有缓存位图,因此它们不必一次又一次地渲染)
现在,我意识到,当我在华为移动设备上反复运行和启动应用程序时,在应用程序尝试为位图分配一些内存时,我得到了 OutOfMemoryException。 所以我想是位图造成了麻烦。我确实知道有一个 bitmap.recycle() 方法。
现在我的问题是:清理内存的最佳做法是什么? 为什么没有像 View::onDestroy() 这样的 View 方法可以实现清理的目的?
编辑:示例
我的“CirclyButton”(扩展按钮)类总是在 onDraw 上绘制一个缓存的位图:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(this.getDefaultBitmap(), 0, 0, paint);
}
private Bitmap getDefaultBitmap(){
if(mBitmapDefault == null){
mBitmapDefault = Bitmap.createBitmap(8*radius, 8*radius, Config.ARGB_8888);
Canvas canvas = new Canvas(mBitmapDefault);
this.drawDefault(canvas);
return mBitmapDefault;
}
return mBitmapDefault;
}
所以我猜这个分配的数据应该在某个地方回收......?
【问题讨论】:
标签: android memory-management memory-leaks out-of-memory