2010-08-21 3 views
4

У меня есть 2 больших тихих анимация каждого 50pics 20kb Как определяются как Анимации .xmlAndroid setBackgroundResource релиз памяти?

Один я позволил начать с самого начала, а второй после нажатия кнопки.

//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 ??

ТНХ Крисом

ответ

0

Попробуйте запустить

rocketAnimation.setCallback(null); 

, прежде чем показать anim2.

btw: N1 имеет больше кучи за приложение, разрешенное (24mb), чем G1 (16mb). Samsung Galaxy S имеет еще больше (48 МБ). Но через параметр вы также можете установить более высокий предел кучи для эмулятора; (к сожалению, не для непривязанного телефона, хотя).

+0

Привет, я попробовал прямо сейчас ... не помог, все равно просто сбой :( как упоминалось каждый из них для его самостоятельной работы, поэтому mem для одного из этих анимаций достаточно, но выглядит последний аниматор не выйдет. –

+0

Возможно, анимация просто слишком велика для устройства. Вы можете рассчитать память, которую она ест. см. мой ответ на http://stackoverflow.com/questions/3238388/android-out-of-memory-exception -in-gallery/3238945 # 3238945 ... размер файла изображений (т. е. 20kB) не имеет значения, важно то, что это ширина и высота, поскольку он полностью преобразуется в растровые изображения внутри, и поэтому актуальной является память, что эти –

+0

Спасибо, сейчас мое приложение отлично работает на 2.2 (здесь управление памятью намного лучше) ... попробует ваш код также с 1.6 - 2.0 , пока он говорит в 2.2: 0 8-22 15: 16: 30.564: DEBUG/1 (27859): debug.heap native: выделено 3.66MB из 3.70MB (0.03MB бесплатно) в [com.chris.myapp.mainactivity] 08-22 15:16: 30.564: DEBUG/1 (27859): debug.memory: выделено: 2.00MB 24.00MB (0.00MB бесплатно) –

0

Попробуйте добавить imgView.setBackgroundResource (0); перед строкой imgView.setBackgroundResource (R.layout.anim2);

Смежные вопросы