解决异常android.view.InflateException: Binary XML file line #95: Error inflating class(out of memory)

异常记录:
异常出现情景(三星手机出现几率特别大):打开一个activity,这个activity只用来播放一个ViewPager的轮播动画(一般会在app首次启动时)。轮播到最后一张时,关掉activity(finish)。开第二的activity,在加载LayoutInflate.from(context).inflate()时会出现android.view.InflateException: Binary XML file line #69: Error inflating class.caused by out of memory.异常
一开始我怎么也没有想明白,activity已经都finish了,怎么可能会内存不足。其实是因为我们并没有手工回收资源,换句话说,java的垃圾回收机制并没有那么的聪明,我们finish掉了,但里面相关的资源他未必回收。有可能他自以为很聪明的留下来等着我们下次使用。所以我们需要在onStop的方法中手动释放imageView这样的大型资源。

解决办法:
1.定义一个方法releaseImageViews(),用来释放imageView资源

//释放所有的图片
private void releaseImageViews() {
    releaseImageView(iv1);
    releaseImageView(iv2);
    releaseImageView(iv3);
    releaseImageView(iv4);
    releaseImageView(iv5);
}

     /*手工回收资源*/
 private void releaseImageView(ImageView imageView) {
      Drawable d = imageView.getDrawable();
      if (d != null)
        d.setCallback(null);
      imageView.setImageDrawable(null);
      imageView.setBackgroundDrawable(null);
  }

2.重写onDestroy方法:
@Override
protected void onDestroy() {
    releaseImageViews();
    super.onDestroy();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值