我至少有<= 30张图像来制作动画。当我播放动画手机内存满载时。我在log cat中收到了一条消息,如:
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
将堆(frag case)增长到45.700MB 。 出于这个原因,许多较低的虚拟内存设备无法运行此动画。应用程序崩溃。
我使用优化的 PNG 文件来减少运行时的VM大小。但仍然没有变化。我还在Manifest文件中写了 android:allowBackup =“true”,它有更好的帮助。我像这样播放我的动画:
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中运行应用程序 - &gt;结果没问题。但在Sony X-Peria New 我有时会遇到错误。 任何解决方案都可以在各种设备中顺利运行?
答案 0 :(得分:3)
这些图片可能太大了。您将它们转换为.PNG的事实对您没有帮助,因为磁盘上的大小与消耗的内存大小无关。图像作为Bitmap对象加载。因此,假设您的图像尺寸为1,000 x 1,000像素。如果位图配置为ARGB_8888,则每个像素为4个字节。运行数学,该图像为4 MB。将30个图像乘以30个图像,然后突然看到内存所需的120 MB。
缩小图像的分辨率,或者按比例缩小图像。
largeHeap = true是真正问题的创可贴。