android 帧动画运行总是显示setcontent()出错,动画Drawable在Android中第二次运行时导致OutOfMemoryError...

我正在开发一款游戏,我正在尝试使用一个AnimationDrawable在我的主菜单中显示一个动画.当我运行一次游戏时,它完美运行.但是如果我点击后退按钮,当我再次打开游戏时它会给我OutOfMemorryError.如果我回到家并回到游戏中,它会加载但不显示动画,它应该是空的.

我认为当它再次打开游戏时它会尝试加载动画,但它已经从上一次运行中加载了,我可以以某种方式释放该内存吗?我该怎么处理这个例外?

搜索我可以发现它是Android中的常见问题,但我找不到任何有用的东西.

如果相关,我的图像是310x316,我有114帧加载,动画加载到xml.

我的MainMenu课程:

public class MainMenuActivity extends Activity{

private String TAG = MainMenuActivity.class.getSimpleName();

ImageView rabbitMenu ;

AnimationDrawable ad;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.mainmenu);

rabbitMenu = (ImageView) findViewById(R.id.rabbitMenu);

rabbitMenu.setImageResource(R.drawable.rabbit_menu_animation);

ad = (AnimationDrawable) rabbitMenu.getDrawable();

}

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

ad.start();

}

}

错误日志:

01-31 16:13:11.320: E/AndroidRuntime(19550): FATAL EXCEPTION: main

01-31 16:13:11.320: E/AndroidRuntime(19550): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

01-31 16:13:11.320: E/AndroidRuntime(19550): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

01-31 16:13:11.320: E/AndroidRuntime(19550): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:563)

01-31 16:13:11.320: E/AndroidRuntime(19550): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439)

编辑:

在@OleGG建议之后,现在第二次运行正常,但在第三次运行时,我显然试图使用循环位图.

所以我放弃了使用AnimationDrawable,我用AsncTask来解决我的问题.现在我继续在onProgressUpdate()上更改ImageView的背景.可能不是最好的方法,但现在我没有任何问题!这是我的AsyncTask代码,以防有人有同样的问题!

private class DrawRabbit extends AsyncTask {

private boolean running = true;

private int fps = 24;

private int frame = 10014;

private String drawableName;

@Override

protected Void doInBackground(Void... params) {

while (running){

try {

if (frame == 10014)

Thread.sleep(1000);

else

Thread.sleep(fps);

if (frame < 10160) {

frame++;

publishProgress(frame);

}

else

running = false;

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return null;

}

protected void onProgressUpdate(Integer... frame) {

drawableName = "rm" + frame[0];

int res_id = getResources().getIdentifier(drawableName, "drawable", getPackageName());

rabbitFrame.setBackgroundResource(res_id);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值