1

我在所有五个活动中都使用了 AnimationDrawable。一段时间后,我遇到了 outofMemory 错误。

问题与虚拟堆内存有关,当我点击新活动时,我正在寻找一种方法来删除所有早期/以前的动画。

我尝试了一些方法:

 1) Runtime.getRuntime().gc();

 2) activity_name.finish();

 3) startGirlBlinking.stop();
    iView_cow.setBackgroundDrawable(null);

日志猫:

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)

得到帮助以解决应用程序崩溃,但时间不长。我需要一个有价值的解决方案。

怎么解决这个问题。请给我这样做的方法。

4

4 回答 4

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);
    }
于 2015-01-24T09:21:37.217 回答
0

你能试试这样吗:

((AnimationDrawable)(someButton.getBackground())).stop();
someButton.setBackgroundDrawable(null);
someButton.setBackgroundResource(R.drawable.animation);
于 2013-11-17T20:07:05.683 回答
0

看起来位图对于您运行它的设备来说太大了。我建议执行以下操作:

  1. 在此处阅读有关处理位图的良好做法的文档 - 特别是有效地加载大型位图和管理位图内存 - http://developer.android.com/training/displaying-bitmaps/index.html
  2. 使用图形程序缩小位图并将其放置在相应的文件夹中 - xhdpi/hdpi/mdpi 等
  3. 查看在解码位图时更改 Bitmap.Config (options.inPreferredConfig) 值 - http://developer.android.com/reference/android/graphics/Bitmap.Config.html
于 2013-11-18T09:07:37.383 回答
0

我想问题是你解码的资源太大了。您应该使用public static Bitmap decodeResourceStream (Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)来缩减资源。

于 2013-11-18T03:13:36.147 回答