SurfaceView로 애니메이션을 돌리다가
취소버튼을 눌러서 액티비티를 종료하면 

"예상치 않게 중지되었습니다. 다시 시도해 주세요"

라는 메세지가 뜨는데 에러를 못찾겠습니다.
SurfaceView 를 사용하다가 취소하면 어떤 작업을 해줘야 하는지...
소스는 아래와 같습니다.
문제 좀 찾아주시면 감사하겠습니다.



※ 코드 하이라이트 기능을 어떻게 쓰는건지 모르겠네요.
죄송하지만 그냥 올립니다.


package com.exam;

import java.util.*;

import android.app.*;
import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.widget.*;

public class NewCard extends Activity {

private boolean aning = true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.newcard);
   FrameLayout v = (FrameLayout)findViewById(R.id.drawarea);
   v.addView(new MySurfaceView(this));
}
@Override
protected void onPause() {
super.onPause();
aning = false;
}
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{

private SurfaceHolder mHolder;
private Thread mThread;
public MySurfaceView(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mThread = new AniThread(context, mHolder);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
//mThread.destroy();
}
class AniThread extends Thread{
Context context;
SurfaceHolder mHolder;
ArrayList<Bitmap> arBitmap = new ArrayList<Bitmap>();
int count=0;
public AniThread(Context context, SurfaceHolder mHolder){
this.context = context;
this.mHolder = mHolder;
Resources res = context.getResources();
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_00));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_01));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_02));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_03));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_04));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_05));
arBitmap.add(BitmapFactory.decodeResource(res, R.drawable.ani_06));
}
public void run(){
mHandler.sendEmptyMessage(0);
}
public void draw(){
Log.d("my", "AniThread.draw()");
Canvas canvas = mHolder.lockCanvas();
try{
synchronized(mHolder){
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(arBitmap.get(count), 0, 0, null);
}
}finally{
mHolder.unlockCanvasAndPost(canvas);
}
}
private Handler mHandler = new Handler(){
public void handleMessage(Message msg){
if(count < arBitmap.size()-1){
count++;
}else{
count=0;
}
draw();
if(aning==true){
sendEmptyMessageDelayed(0, 500);
}
}
};
}
}
}