2013-03-27 128 views
0

我遇到了内存不足的问题,因此我决定在开始新活动之前清理背景。开始新活动后清除背景

它的工作原理,但我有一个坏的副作用,我有一个黑色的屏幕之前,一个新的活动开始。

这是我的代码:

我将在这里:

@Override 
protected void onResume() { 
    super.onResume(); 

    bg.setBackgroundDrawable(new BitmapDrawable(decodeSampledBitmapFromResource(getResources(), R.drawable.bg, sizeWigth, sizeHeight))); 

} 

我在这里清除:

@Override 
protected void onPause() { 
    super.onPause(); 
    bg.setBackgroundDrawable(null); 
    System.gc(); 
} 

你有什么想法解决它?

+0

为什么不使用'bg.setBackgroundResource(R.drawable.bg);'?或者更好的是,为什么不把它设置为XML? – Shade 2013-03-27 22:31:53

回答

1

当装载大图片请务必遵循以下规则

  1. 负载根据您的屏幕DPI的图像。如果你的屏幕很小,没有理由把巨大的图像加载到内存中。

  2. 位图采样。读取this用于对大图像进行二次采样

  3. 监视您的HeapSize并使您在加载图像以进行其他处理后有足够的空间。检查此link

  4. 使用java引用加载图像。确保在图像为空时重新加载图像。这将帮助您避免内存不足问题。

    System.gc();

是垃圾收集器的提示,并且它们不能保证垃圾收集器在执行该行后收集垃圾。

将此图像放在XML布局上不会帮助您解决内存问题。