gpt4 book ai didi

android - 从 AnimationDrawable 释放内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:16 25 4
gpt4 key购买 nike

我在应用程序的许多 Activity 中都使用了动画可绘制对象。这是初始化它们的代码:

 public void prepareVideo (int resourceBall, String animation, int width, int height ){

imgBall = (ImageView)findViewById(resourceBall);
imgBall.setVisibility(ImageView.VISIBLE);
String resourceNameAnimation = animation;
int id_res = getResources().getIdentifier(resourceNameAnimation, "drawable", getPackageName());
imgBall.setBackgroundResource(id_res);
LayoutParams latoutFrame = imgBall.getLayoutParams();
latoutFrame.width = width;
latoutFrame.height = height;
imgBall.setLayoutParams(latoutFrame);
frame = (AnimationDrawable) imgBall.getBackground();


}

然后我调用: imgBall.post(new StartAnimation());

调用一个runnable:

class StartAnimation implements Runnable {

public void run() {

frame.start();

}

}

问题是我使用了许多使用相同 xml(逐帧)的动画。我必须在许多具有相同动画的 Activity 中调用此方法。最后我得到一个内存不足的错误。我正在尝试释放屏幕之间的内存:

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

问题是,当我尝试再次使用资源时,你会得到其他错误:“尝试使用回收位图”

有人知道释放内存的其他方法吗?

最佳答案

我有同样的问题,问题是可运行的。为每个动画制作一个独立的线程使得 animationDrawables 在销毁 Activity 并清除 View 和回调后仍然存在。因此,在没有独立线程的情况下启动动画可以让 GC 收集未使用的资源。

关于android - 从 AnimationDrawable 释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515950/

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