Android setBackgroundResource释放内存?

时间:2010-08-21 12:12:28

标签: android memory-management animation

我有2个安静的大动画,每个50pics一个20kb 两者都定义为Animations .xml

一个按钮点击后,我从头开始,第二个按钮开始。

//Start immediatly
  imgView.setBackgroundResource(R.layout.anim1);
                rocketAnimation = (AnimationDrawable) imgView.getBackground();

//Start after button click
  imgView.setBackgroundResource(R.layout.anim2);
                rocketAnimation = (AnimationDrawable) imgView.getBackground();

它工作正常,直到我按下按钮并将第二个动画分配给我的视图

08-22 14:56:03.886: DEBUG/AndroidRuntime(1541): Shutting down VM
08-22 14:56:03.886: WARN/dalvikvm(1541): threadid=3: thread exiting with uncaught exception (group=0x4001da28)
08-22 14:56:03.886: ERROR/AndroidRuntime(1541): Uncaught handler: thread main exiting due to uncaught exception
08-22 14:56:04.096: ERROR/AndroidRuntime(1541): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
08-22 14:56:04.096: ERROR/AndroidRuntime(1541):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

看起来绝对是每个动画本身都很好(我甚至可以在自动启动时设置anim2)。但是两个人都会超过记忆。

顺便说一下。在我的Nexus One上它完美无缺。失败的地方是G1 1.6(即使在模拟器中)。

所以我如何在分配anim2之前先释放anim1?

THX 克里斯

2 个答案:

答案 0 :(得分:0)

尝试运行

rocketAnimation.setCallback(null);

在你展示anim2之前。

btw:N1允许的每个应用程序堆(24mb)比G1(16mb)多。三星Galaxy S甚至更多(48MB)。但是通过参数,您还可以为模拟器设置更高的堆限制; (不幸的是,不是因为无根电话)。

答案 1 :(得分:0)

尝试在行 imgView.setBackgroundResource(R.layout.anim2);

之前添加 imgView.setBackgroundResource(0);