我在我的所有五个活动中都使用了AnimationDrawable。经过一段时间后,我出现了错误。
问题与Virtual Heap Memory有关,我找到了一种方法,当我点击新的Activity时,删除所有早期/前一个动画。
我尝试了一些方法:
1) Runtime.getRuntime().gc();
2) activity_name.finish();
3) startGirlBlinking.stop();
iView_cow.setBackgroundDrawable(null);
Logcat:
E/AndroidRuntime(11449): java.lang.OutOfMemoryError
E/AndroidRuntime(11449): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(11449): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:577)
E/AndroidRuntime(11449): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
帮助重新启动应用程序崩溃,但不是很长时间。我需要一个有价值的解决方案。
如何恢复这件事。 Plase给了我这样做的方法。
答案 0 :(得分:4)
使用以下方法扩展您的AnimationDrawable:
public void Recycle() {
for (int i = 0; i < getNumberOfFrames(); ++i){
Drawable frame = getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
}
frame.setCallback(null);
}
setCallback(null);
}
答案 1 :(得分:0)
你可以尝试这样:
((AnimationDrawable)(someButton.getBackground())).stop();
someButton.setBackgroundDrawable(null);
someButton.setBackgroundResource(R.drawable.animation);
答案 2 :(得分:0)
我认为问题是你解码的资源太大了。您应该使用public static Bitmap decodeResourceStream (Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)
缩小资源。
答案 3 :(得分:0)
看起来位图对于您正在运行它的设备来说太大了。我建议做以下事情: