天天看點

android 動畫記憶體洩漏,android圖檔幀動畫造成記憶體溢出的處理方法

package com.anwen.widget;

import android.os.Handler;

import android.util.Log;

import android.widget.ImageView;

import com.anwen.event.BaseEvent;

import com.anwen.event.EventCode;

import com.anwen.manager.EventManager;

public class ImageAnimation {

private Handler handler;//線程處理

private MovieAction action;//播放器

//固定循環時間

public ImageAnimation(ImageView view,int[] frameRes,int duration){

int len = frameRes.length;

int [] frameDuration = new int[len];

for(int i=0;i

frameDuration[i]=duration;

}

this.Init(view,frameRes,frameDuration);

}

//非固定循環時間

public ImageAnimation(ImageView view, int [] frameRes,int[] frameDuration){

this.Init(view,frameRes,frameDuration);

}

private void Init(ImageView view, int [] frameRes,int[] frameDuration){

if(null==view) {

Log.e("ImageAnimation", "建立動畫失敗。");

}else if(null == frameRes || null == frameDuration ||0 == frameRes.length ||0 == frameDuration.length) {

Log.e("ImageAnimation", "幀數或資源為空.");

}else if(frameRes.length != frameDuration.length){

Log.e("ImageAnimation","幀數與間隔時間不比對");

}else {

handler = new Handler();

action = new MovieAction(handler, view, frameRes, frameDuration);

}

}

}

//動畫播放類

class MovieAction implements Runnable{

private ImageView mView;//畫布

private int [] mFrameRes;//資源

private int[] mFrameDuration;//間隔

private int currentFrame;//目前幀

private int totalFrame;//總幀數

private Handler mHandler;//線程

public MovieAction(Handler handler,ImageView view, int [] frameRes,int[] frameDuration){

this.mView = view;

this.mFrameRes = frameRes;

this.mFrameDuration = frameDuration;

this.mHandler = handler;

totalFrame = this.mFrameRes.length;

currentFrame = 0;

mHandler.postDelayed(this, mFrameDuration[currentFrame]);

}

public void destory(){

this.mHandler.removeCallbacks(this);

}

@Override

public void run() {

mView.setBackgroundResource(mFrameRes[currentFrame]);

currentFrame++;

if(++currentFrame

mHandler.postDelayed(this, mFrameDuration[currentFrame]);

}else{

System.out.println("destory、、、、、");

destory();

EventManager.getInstance().DispatchEvent(new BaseEvent(EventCode.ShowBtn));

}

}

}