0

我正在尝试制作动画。我有 3 张图像(每张 14kb),我将它们放入图像视图中。使用动画类的计时器在我的第一个实现中,android 始终耗尽内存并且应用程序崩溃。这是我下面的代码

第一次尝试

动画列表(drawable.insert.xml)

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">

 <item android:drawable="@drawable/a1" android:duration="550" /> 
 <item android:drawable="@drawable/a2" android:duration="550" /> 
 <item android:drawable="@drawable/a3" android:duration="550" />
</animation-list>

开始动画

private void startTheAnimations(final int alertType){
System.gc();
try{
final ImageView image = (ImageView)view.findViewById(R.id.animations);

if(alertType == INSERT){
image.setBackgroundResource(R.drawable.insert);
}

splashAnimation = (AnimationDrawable) image.getBackground();
splashAnimation.start();

}catch(Exception e){
e.printStackTrace();
}
}

我想尝试如下所示的异步任务,但这也崩溃了,说明我无法在 UI 线程之外设置图像视图的背景。这无济于事,因为 ui 线程由于内存不足而崩溃。

尝试 2 异步任务

public void startAnimation(){
final ImageView image = (ImageView)view.findViewById(R.id.animations);  
AnimationTask task = new AnimationTask(image);
task.execute(alertType);   
}

class AnimationTask extends AsyncTask<Integer, Void, Boolean> {
private final ImageView image;

public AnimationTask(ImageView imageView) {
image = imageView;
}

// Decode image in background.
@Override
protected Boolean doInBackground(Integer... params) {
int alertType = params[0];
try{
if(alertType == INSERT){
image.setBackgroundResource(R.drawable.insert);
}
}catch(Exception e){
e.printStackTrace();
}
return true;
}

@Override
protected void onPostExecute(Boolean t) {
AnimationDrawable a =   (AnimationDrawable) image.getBackground();
a.start();

}
}

结束一个已经很长的问题,有谁知道我怎样才能让这个动画正常工作?

4

1 回答 1

0

我通过增加活动清单中的堆找到了解决此问题的方法

android:largeHeap="true"
于 2013-11-14T18:57:45.957 回答