【发布时间】:2011-09-20 19:27:16
【问题描述】:
我的小应用程序总是在第 5 次或第 6 次屏幕旋转后崩溃。定义了两种主要布局,一种用于横向,一种用于纵向。在花了一整天寻找内存泄漏后,我发现了问题:我有一个 JPG 定义为 Main-Activity 的背景。将JPG转换为PNG后,内存问题就解决了。
背景被定义为可绘制并在 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。
【问题讨论】:
-
这不是两次调用recycleImages,一次在OnPause,一次在onDestroy?
标签: android memory-leaks png jpeg