Android内存优化总结【整理】

  1. http://blog.youkuaiyun.com/tiantangrenjian/article/details/39182293
  2. http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0920/3478.html
  3. http://blog.youkuaiyun.com/kifile/article/details/40751665
  4. http://android.jobbole.com/82248/
  5. http://blog.youkuaiyun.com/tiantangrenjian/article/details/39182293
  6. http://blog.youkuaiyun.com/a396901990/article/details/38904543

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!


内存占用检测工具:

http://blog.youkuaiyun.com/xu_fu/article/details/45678373



AS自带Monitor工具使用:

http://blog.youkuaiyun.com/yutao52shi/article/details/50055669



独立 MAT工具使用:

http://www.jianshu.com/p/216b03c22bb8


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!


原图大小285kb,宽高1354x848

直接加载到内存中,内存暴涨54M

设置ImageView宽高为100px x 100px ,内存没有任何变化,还是54M

使用下面的方法先缩放,再加载。缩放为100,100,结果内存只涨了3M!!!  千差万别啊。。。。。


  public Drawable resizeImage(int width, int height) {

        //获取图片宽高
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true; //不加载bitmap到内存中
        BitmapFactory.decodeResource(getResources(), R.drawable.aa, options);
        int oldWidth = options.outWidth;//原图 宽度
        int oldHeight = options.outHeight;//原图 高度

        //得到新的缩放比例
        int sampleSizeNew = 1;
        if (oldWidth != 0 && oldHeight != 0 && width != 0 && height != 0) {
            sampleSizeNew = (oldWidth / width + oldHeight / height) / 2;
        }

        //创建新的option
        BitmapFactory.Options optionsNew = new BitmapFactory.Options();
        optionsNew.inJustDecodeBounds = false;//加载bitmap到内存中
        optionsNew.inSampleSize = sampleSizeNew;//新的缩放比例

        //按照新的option加载图片
        return new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.aa, optionsNew));
    }


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!


ctx就是整个Activity的引用。


有两个Activity,A和B。

A跳转到B,B把自己的ctx放到了另外一个类的静态变量,然后返回到A。


那么这个时候,B所有的资源,都不会被释放!因为另外一个类的静态变量,一直对它有一个引用。

我们单例的时候,传入的ctx就是这样的!!!



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!



java一直会做内存回收的,在内存紧张的时候。

但是,但是!如果对象被引用,有引用关系在,无法回收。那么最后到达 阀值,就OOM了。

这个才是OOM的原因!!!!!!!      有东西无法被回收!!!回收不了!被引用着呢。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值