我有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 克里斯
答案 0 :(得分:0)
尝试运行
rocketAnimation.setCallback(null);
在你展示anim2之前。
btw:N1允许的每个应用程序堆(24mb)比G1(16mb)多。三星Galaxy S甚至更多(48MB)。但是通过参数,您还可以为模拟器设置更高的堆限制; (不幸的是,不是因为无根电话)。
答案 1 :(得分:0)
尝试在行 imgView.setBackgroundResource(R.layout.anim2);
之前添加 imgView.setBackgroundResource(0);