JPG作为Activity中的背景会产生内存泄漏

时间:2011-06-22 22:59:50

标签: android memory-leaks png jpeg

我的小应用程序在第5或第6次屏幕旋转后总是崩溃。定义了两个主要布局,一个用于纵向布局,用于纵向布局。在花了一整天寻找内存泄漏之后我发现了问题:我将JPG定义为Main-Activity的背景。将JPG更改为PNG后,内存问题得以解决。

后台定义为drawable,并在main.xml中定义。

当我在2.2(模拟器)下测试应用程序但是使用2.3.1(也是模拟器)应用程序崩溃时,问题没有出现。

有人可以重现这个问题吗?


现在我将我的应用程序缩减为以下代码:

package at.memtest;

import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MemTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

@Override
protected void onDestroy() {
    recycleImages();
    super.onDestroy();

}

@Override
protected void onPause() {
    recycleImages();
    super.onPause();
}


private void recycleImages() {
    final LinearLayout theView = (LinearLayout) findViewById(R.id.main_layout);
    if (theView != null) {
        final BitmapDrawable background = (BitmapDrawable) theView.getBackground();
        if (background != null) {
            background.getBitmap().recycle();
        }
    }
}
}

现在记忆保持不变...... 你可以想象这是否有必要避免内存泄漏? 正如我上面所说 - 我用作背景的图像是一个大约220K的PNG。

3 个答案:

答案 0 :(得分:0)

您确定文件格式是问题吗?试试这个:http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

使用PNG可能只是你的内存不足。

答案 1 :(得分:0)

我遇到了同样的问题 而不是.jpg,我用.png,解决了这个问题。

答案 2 :(得分:0)

我在使用jpg背景图片时遇到问题,这使得我的应用程序在某些设备上也非常慢。虽然使用png并没有解决它。我认为它可能与我为图像选择的高压缩有关,以节省空间,这可能导致在运行时更多的努力进行解压缩。