android canvas when on turn my phone it crash
<p>I'm just playing with the canvas and surfaceview to get a better understand however when I turn the phone crash and the view pretty much the same I though that what surface was support take care of here my code can some tell me what going on and how to fix it.</p>

<pre><code>public class test extends Activity { 
private int Playery =0;
private int Playerx =0;
private float RectStartx =0;
private float RectStarty= 120;
private float RectEndx =240;
private float RectEndy =240;
private int ImageBottom; 

private boolean trueOrFalse = true;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new Frame(this));
    }

    class Frame extends SurfaceView implements SurfaceHolder.Callback{
        private frameThread thread;

        public Frame(Context context) {
            super(context);
            getHolder().addCallback(this);
            thread = new frameThread(getHolder(),this); 
        }

        @Override
        public void onDraw(Canvas canvas){
            canvas.drawColor(Color.RED);
            canvas.drawRect(RectStartx, RectStarty, RectEndx, RectEndy, new Paint(Color.RED));

            if(trueOrFalse == true){
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
                canvas.drawBitmap(bitmap, Playerx, Playery, null);

                ImageBottom = Playery + bitmap.getHeight(); 

                if(ImageBottom != RectStarty || Playerx &gt; RectEndx || Playerx &lt; RectStartx ){
                    Playery = Playery+2; 
                }

                if(Playery &gt; RectEndx){
                    trueOrFalse = false;
                }
            }
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if(ImageBottom == RectStarty){
                Playerx = Playerx+10;
            }

            return super.onTouchEvent(event);
        }

        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }
        public void surfaceCreated(SurfaceHolder holder) {
            thread.setRunning(true);
            thread.start();
        }
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            while (retry){
                try{
                    thread.join();
                    retry = false;
                }catch(InterruptedException e ){

                }
            }
        }
    }  

    class frameThread extends Thread{
        private SurfaceHolder _surfaceHolder;
        private Frame _frame;
        private boolean _run = false;

        public frameThread(SurfaceHolder surfaceHolder, Frame frame){
            _surfaceHolder = surfaceHolder;
            _frame = frame;
        }

        public void setRunning(boolean run){
            _run = run;
        }

        @Override
        public void run(){
            Canvas c;
            while(_run){
                c = null;
                try{
                    c = _surfaceHolder.lockCanvas(null);
                synchronized (_surfaceHolder){
                    _frame.onDraw(c);
                }
                }finally{
                    if(c != null){
                        _surfaceHolder.unlockCanvasAndPost(c);
                    }
                }
            }
        }
    }
}
</code></pre>
