怎么在view销毁的时候 把bitmap recycle

在Android开发中,当一个视图(View)因为某些原因(比如屏幕旋转、配置更改等)不再被使用时,应当释放其所占用的资源,尤其是当这些资源是可变的(mutable)并且占用大量内存时,比如Bitmap对象。以下是在`TestResultView`类中释放Bitmap资源的步骤:

1. **重写`onDetachedFromWindow`方法**:这是视图从窗口分离时调用的方法,是释放资源的理想位置。

2. **回收Bitmap资源**:在`onDetachedFromWindow`中,检查`mainImage`、`subImage1`和`subImage2`所持有的Bitmap对象,并调用它们的`recycle()`方法来释放内存。

3. **清除引用**:回收Bitmap后,将ImageView的drawable设置为`null`,以清除对Bitmap的引用,使其可以被垃圾回收器回收。

以下是修改后的`TestResultView`类的示例:

```java
public class TestResultView extends FrameLayout {
    // ... 省略其他代码 ...

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        // 回收Bitmap资源
        Bitmap bitmap = mainImage.getDrawable() instanceof BitmapDrawable ?
                ((BitmapDrawable) mainImage.getDrawable()).getBitmap() : null;
        if (bitmap != null && !bitmap.isRecycled()) {
            bitmap.recycle();
            mainImage.setImageDrawable(null);
        }

        bitmap = subImage1.getDrawable() instanceof BitmapDrawable ?
                ((BitmapDrawable) subImage1.getDrawable()).getBitmap() : null;
        if (bitmap != null && !bitmap.isRecycled()) {
            bitmap.recycle();
            subImage1.setImageDrawable(null);
        }

        bitmap = subImage2.getDrawable() instanceof BitmapDrawable ?
                ((BitmapDrawable) subImage2.getDrawable()).getBitmap() : null;
        if (bitmap != null && !bitmap.isRecycled()) {
            bitmap.recycle();
            subImage2.setImageDrawable(null);
        }
    }

    // ... 省略其他代码 ...
}
```

请注意,这段代码假设`mainImage`、`subImage1`和`subImage2`的`Drawable`是`BitmapDrawable`类型。如果使用了其他类型的`Drawable`,您可能需要进行相应的调整。

此外,如果这些ImageView是由用户交互或其他逻辑动态设置的,那么您可能还需要在其他地方(比如`onPause`或`onStop`)释放Bitmap资源,具体取决于您的应用程序逻辑和用户界面的生命周期。

最后,请确保在应用程序的其它部分没有其他地方引用这些Bitmap对象,否则它们可能不会被回收。

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值