У меня есть как минимум < = 30 изображений для создания анимации. Когда я полностью загрузил память анимации телефона. Я получил сообщение в журнале кошке, как:Освободить память во время выполнения, когда анимация воспроизводится через AnimationDrawable
12-26 18:01:48.335: D/dalvikvm(7385): GC_FOR_ALLOC freed 257K, 5% free 44870K/47175K, paused 16ms, total 16ms
12-26 18:01:48.340: I/dalvikvm-heap(7385): **Grow heap (frag case) to 45.700MB** for 1048592-byte allocation
12-26 18:01:48.355: D/dalvikvm(7385): GC_FOR_ALLOC freed <1K, 5% free 45894K/48263K, paused 15ms, total 15ms
Grow кучи (осколочный случай) к 45.700MB. По этой причине многие устройства с более низкой виртуальной памятью не могут запускать эту анимацию. & приложение получает сбой.
Я использую оптимизированный файл PNG, чтобы уменьшить размер виртуальной машины во время выполнения. Но все равно никаких изменений. Я также написал андроид: allowBackup = "true" в Manifest File, это помогает намного лучше. Я играю свою анимацию, как это:
private AnimationDrawable independentAnimation;
imageViewAnimation = (ImageView) findViewById(R.id.imageViewAnimation);
// set the animation drawable as background
imageViewAnimation
.setBackgroundResource(R.drawable.demo_logo_animation);
// create an animation drawable using the background
independentAnimation = (AnimationDrawable) imageViewAnimation
.getBackground();
// start the animation
imageViewAnimation.post(new Runnable() {
@Override
public void run() {
// for 2.3 devices & All runs well
independentAnimation.start();
}
});
Обязательно анимация demo_logo_animation.xml выглядит: парциальное:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/itv001"
android:duration="@string/log_in_duration"/>
<item
android:drawable="@drawable/itv003"
android:duration="@string/log_in_duration"/>
<!-- <item -->
<!-- android:drawable="@drawable/logoani256_00004" -->
<!-- android:duration="25"/> -->
<!-- <item -->
<!-- android:drawable="@drawable/logoani256_00005" -->
<!-- android:duration="25"/> -->
<item
android:drawable="@drawable/itv006"
android:duration="@string/log_in_duration"/>
<!-- remaining are here -->
</animation-list>
я запустить приложение в Samsung Galaxy S3 -> не приводит никаких проблем. Но в Sony X-Peria New у меня иногда возникали ошибки. Любое решение для бесперебойной работы в виде устройств?
Попробуйте добавить android: largeHeap = "true" в вашем манифесте. – nikvs
уже использовать @nikvs :) –
Проверить доступную память перед запуском анимации – nikvs