gpt4 book ai didi

android - 如何解决android中的OutOfMemoryError?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:55 26 4
gpt4 key购买 nike

我已经准备好了可绘制动画的数量。当应用程序启动时,第一个动画将开始。我有两个按钮(下一个和上一个)具有相同的 Activity 。当我点击下一个按钮时,出现异常,

 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

我的代码是,

用于从drawable获取drawable动画,

private void getAnimationForLetters(int mAnim) {
// TODO Auto-generated method stub
String anim = "capital_anim_" + new Integer(mAnim).toString();

final int resID = getApplicationContext().getResources().getIdentifier(
anim, "drawable", "my-package-name");
mImgLetter.clearAnimation();
mImgLetter.setBackgroundResource(resID);
mImgLetter.post(new Runnable() {

public void run() {
loadingAnimation = (AnimationDrawable) mImgLetter
.getBackground();
loadingAnimation.start();
}
});

}

我的下一个按钮代码是,

case R.id.btnNext_:
unbindDrawables(findViewById(R.id.imgLetter));
mLetterNum=mLetterNum+1;
getAnimationForLetters(mLetterNum);

我的 undind drawable 方法代码是,

private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}

最后我得到异常 java.lang.OutOfMemoryError: bitmap size exceeds VM budget这里显示异常 mImgLetter.setBackgroundResource(resID);请帮助我。

我添加了以下代码来清除,

loadingAnimation.stop();
for (int i = 0; i < loadingAnimation.getNumberOfFrames(); ++i){
Drawable frame = loadingAnimation.getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
}
frame.setCallback(null);
}
loadingAnimation.setCallback(null);

它只对下一个或上一个工作正常。第一次点击下一个动画移动到第二个动画,第二次如果我点击上一个按钮我得到异常,例如,

Canvas: trying to use a recycled bitmap android.graphics.Bitmap

请帮助我。

最佳答案

确切地说 - 系统知道何时收集垃圾,所以调用它至少没有帮助。

您必须真正管理您的应用程序内存。 290x330 可能看起来不多,但如果您使用每像素 4 个字节的完整 RGBA,您的图像就会变成 380K。如果您有其中的几个,您将耗尽内存。大多数 Android 设备与 PC 不同——它们的内存相当有限。有些只有 16M 或 24M 来运行所有内容,包括操作系统和用户可能同时运行的任何其他应用程序。

您可以尝试包装您的例程以使用 try/catch 加载资源

 While( ! success ) {
try {
// load resources
} catch (OutOfMemoryError E) {
// do something to use less memory and try again
}
}

关于android - 如何解决android中的OutOfMemoryError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com