看看背景图如何吃掉你的内存的

这里有两个页面  loading  login, 两个页面都用了 1920*1080的图片,还是 32bit的。
程序一开始loading 页面 就吃掉了30m, 后来跳到login,又吃掉了30m,然后。我去掉了
loading的背景图,立马内存变成了39m了。可以想象一个这么大的图片 吃掉了 30m的内存
多么的恐怖

解决方案
不要在xml里面加背景图片, 用代码来加,并且回收
 private void initBg(){
        Bitmap bm = BitmapFactory.decodeResource(this.getResources(), R.drawable.bg_reg);
        BitmapDrawable bd = new BitmapDrawable(this.getResources(), bm);
        bg_ll.setBackgroundDrawable(bd);
    }


 @Override
    protected void onDestroy() {
        if(bg_ll!=null){
            BitmapDrawable bd = (BitmapDrawable)bg_ll.getBackground();
            bg_ll.setBackgroundResource(0);//别忘了把背景设为null,避免onDraw刷新背景时候出现used a recycled bitmap错误
            if(bd!=null){
                bd.setCallback(null);
                bd.getBitmap().recycle();
            }
        }
        System.gc();//不gc  系统不会立刻释放背景图片内存
        super.onDestroy();

    }




看看 我改了代码后 在 ondestory gc后的结果



猜你喜欢

转载自ycljf86.iteye.com/blog/2324670