Imageview中的动画耗尽内存

时间:2013-10-28 20:45:28

标签: android multithreading animation asynchronous imageview

我正在尝试制作动画。我有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();
}
}

我想过尝试一个如下所示的asynctask但是这也崩溃说我无法在UI线程之外设置一个imageview的背景。这没有用,因为ui线程由于内存不足而崩溃。 / p>

尝试2 asynctask

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();

}
}

要结束一个已经很久的问题,有谁知道如何让这个动画正常工作?

1 个答案:

答案 0 :(得分:0)

我通过增加活动清单中的堆

找到了解决此问题的方法
android:largeHeap="true"