我正在尝试制作动画。我有3个图像(每个14kb),我正在进入图像视图。使用动画类的计时器在我的第一个实现中,android一直耗尽内存并且应用程序崩溃。这是我的代码
<?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>
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();
}
}
要结束一个已经很久的问题,有谁知道如何让这个动画正常工作?
答案 0 :(得分:0)
我通过增加活动清单中的堆
找到了解决此问题的方法android:largeHeap="true"