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();
}

你有什么想法来解决它吗?

4

1 回答 1

2

加载大图像时,请确保遵循以下规则

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

  2. 位图采样。阅读内容以对大图像进行二次采样

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

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

    System.gc();

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

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

于 2013-03-27T22:38:26.920 回答