这里有两个页面 loading login, 两个页面都用了 1920*1080的图片,还是 32bit的。
程序一开始loading 页面 就吃掉了30m, 后来跳到login,又吃掉了30m,然后。我去掉了
loading的背景图,立马内存变成了39m了。可以想象一个这么大的图片 吃掉了 30m的内存
多么的恐怖
解决方案
不要在xml里面加背景图片, 用代码来加,并且回收
看看 我改了代码后 在 ondestory gc后的结果
[img]http://dl2.iteye.com/upload/attachment/0120/0615/5f8f3561-7062-397c-b01d-6a80fbea9f23.png[/img]
程序一开始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后的结果
[img]http://dl2.iteye.com/upload/attachment/0120/0615/5f8f3561-7062-397c-b01d-6a80fbea9f23.png[/img]