我在同一个活动中开始 2AnimationDrawable
并且我有一个内存错误。这非常令人惊讶,因为我减小了图像的大小(宽度 = 屏幕宽度),而且我不能再减小它,因为质量会降低。例如,如果我做宽度 = 屏幕宽度/2,它可以工作,但质量很糟糕。
在 logcat 中是这样写的:
02-19 10:56:44.769: E/dalvikvm-heap(3118): 383916-byte external allocation too large for this process.
02-19 10:56:44.809: E/GraphicsJNI(3118): VM won't let us allocate 383916 bytes
02-19 10:56:44.809: W/dalvikvm(3118): threadid=1: thread exiting with uncaught exception (group=0x40018560)
02-19 10:56:44.819: E/AndroidRuntime(3118): FATAL EXCEPTION: main
02-19 10:56:44.819: E/AndroidRuntime(3118): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
我不认为我有内存泄漏,但检查这篇文章,我试图检测潜在的内存泄漏,但在我看来没有。
我真的需要一些帮助,因为这不是我在这个项目中的第一个内存错误,我总是很难处理。
这是我的代码:
private void startAnimation(AnimationDrawable animation1,
AnimationDrawable animation2) {
int drawables[] = new int[] { R.drawable.fire1, R.drawable.fire2,
R.drawable.fire3, R.drawable.fire4, R.drawable.fire5,
R.drawable.fire6, R.drawable.fire7, R.drawable.fire8,
R.drawable.fire9, R.drawable.fire10down2,
R.drawable.fire11down2, R.drawable.fire12down2,
R.drawable.fire13down2, R.drawable.fire14down2,
R.drawable.fire15down2, R.drawable.fire16down2 };
int drawables2[] = new int[] { R.drawable.fire14down2,
R.drawable.fire14down2, R.drawable.fire14down2,
R.drawable.fire14down2, R.drawable.fire14down2,
R.drawable.fire14down2, R.drawable.fire14down2,
R.drawable.fire14down2, R.drawable.fire14down2,
R.drawable.fire10up, R.drawable.fire11up, R.drawable.fire12up,
R.drawable.fire13up, R.drawable.fire14up, R.drawable.fire15up,
R.drawable.fire16up };
bitmapDrawable = new BitmapDrawable[drawables.length];
bitmapDrawable2 = new BitmapDrawable[drawables2.length];
for (int i = 0; i < drawables.length; i++) {
bitmapDrawable[i] = new BitmapDrawable(
decodeSampledBitmapFromResource(getResources(),
drawables[i], width));
Log.w("BITMAP", "i=" + i);
bitmapDrawable2[i] = new BitmapDrawable(
decodeSampledBitmapFromResource(getResources(),
drawables2[i], width));
animation1.addFrame(bitmapDrawable[i], 50);
animation2.addFrame(bitmapDrawable2[i], 50);
}
animation1.setOneShot(true);
animation2.setOneShot(true);
image2.setLayoutParams(params);
image2.setImageDrawable(animation1);
image2.post(new Starter(animation1));
image3.setLayoutParams(params);
image3.setImageDrawable(animation2);
image3.post(new Starter(animation2));
}
class Starter implements Runnable {
AnimationDrawable animation = new AnimationDrawable();
public Starter(AnimationDrawable animation) {
this.animation = animation;
}
public void run() {
animation.start();
}
}
我怎样才能减少位图的重量(如果有必要?问题可能在其他地方 - 并保持图像的质量?我看不出问题出在哪里,我只使用 30 张图像,其他应用程序使用很多更多!还有其他方法吗?