android 中关于内存管理的记录

        最近在项目中添加了腾讯bugly之后,发现程序中总是报各种oom,不知道用过这个工具的兄弟们有没有同样的感觉,用这个工具搞得人比以前更累了,埋怨归埋怨,其实也说明我们写的代码质量不够好而已。

         针对项目中的各种oom,我查阅很多大神的博客,解决oom的大致思路是这样的:
           1.内存引用上处理(软引用,强化引用,弱引用)
           2.图片的处理
           3.内存回收机制
           4.优化虚拟机的堆内存分配
           5.自己设置堆内存的大小
     看了之后感觉说的有点虚,个人觉得第一二三点建议还是可以的,但是第五与第四我觉得有点不靠谱,要是你设置了堆内存,万一那个手机没有这样多的内存,你不是把自己坑了吗,所以我在项目中只做了前三点的处理。
    内存中使用引用处理的步骤:
        引用处理的问题,我也是参考以为大神的博客,链接如下(https://software.intel.com/zh-cn/blogs/2014/02/20/android/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-ruanyinyong),自己的表达能力不是很好,就不在此多说了。
    图片的处理步骤:
    1.以前给控件设置图片是这样写的iv.setImageResource(id),现在换成:
               BitmapFactory.Options opt = new BitmapFactory.Options();

opt.inPreferredConfig = Bitmap.Config.RGB_565;

opt.inPurgeable = true;

opt.inInputShareable = true;

opt.inJustDecodeBounds=true;

InputStream is = conetxt.getResources().openRawResource(res);

Bitmap bm = BitmapFactory.decodeStream(is, null, opt);

BitmapDrawable bd = new BitmapDrawable(conetxt.getResources(), bm);
              
             iv.setBackgroundDrawable(bd)
    2.ImageView图片的回收处理
        在activity或者frament中的onstop()中对图片资源进行回收:
             @Override
   protected void onStop() {
// TODO Auto-generated method stub
// 图片资源的回收
releaseImageViews();
super.onStop();
   }
          private void releaseImageViews() {
releaseImageView((ImageView) findViewById(R.id.iv));
          }
          private void releaseImageView(ImageView imageView) {
Drawable d = imageView.getDrawable();
if (d != null)
d.setCallback(null);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
  }
       3.关于内存回收的处理
         这个步骤不好列举,大家只要使用图片的时候就,记住使用完成之后要进行图片回收就好了, bitmap.recycle( );
              

       还有一点建议就是在android的布局文件中尽量不要使用图片资源,这个也会出现oom的。
       
       以上就是最近几天修改项目中的oom的一些新的,希望对你们有用。








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值