我现在正在编写一个应用程序,它使用占据大部分屏幕的四个主要按钮。每一个都有三个动画:一个 12 帧的介绍性动画,一个 33 帧的循环动画,以及一个基于当前帧单击循环关闭的动画。
图像高度约为 250 250 到 450 250。事实证明,在应用程序加载时加载所有这些不仅会导致初始加载缓慢,而且还会导致可用内存较小的设备上出现内存不足异常。
问题是,当我尝试加载动画而不预加载它们时,它会在加载之前跳过并挂起一秒钟。此外,我注意到即使只是在每次点击侦听器需要它们时运行活动动画,内存使用量似乎也从 20mb 到 40mb 堆大小。
我并没有真正做任何奇怪的事情来实现它们。我使用标准
AnimationDrawable animation = (AnimationDrawable)getResources().getDrawable(R.drawable.blah);
imageView.setImageDrawable(animation);
animation start;
但是随后根据需要加载单个动画而不进行预加载会产生轻微的延迟。有没有办法预加载它们(如果这有任何意义)或就我如何在代码中实现它们做其他事情?我目前正在将动画切割成不同的部分,因此唯一改变的帧是动画对象的实际部分。
除此之外,我还能如何处理 AnimationDrawable 和内存?看起来动画对 Android 来说是如此的基础,必须有更好、更专业的方式来处理动画资源,这样它们就不会破坏内存库并且仍然是流动的。请让我知道我这样做是愚蠢的。我应该使用不同的动画类,还是手动将更改分配给基于计时器的动画视图,以便我一次加载一个?
我想这是一个混乱的问题——似乎必须有一种标准的方法来处理这类问题。帧数少?不同格式的图像?(jpg和png是一样的)