title: NullPointerException on lockCanvas()
body: <p>I'm developing a little game (test) for Android, but I don't understand the logic to make a good Timer thread with SurfaceView.</p>
  
  <p>I'm getting a problem with [SurfaceView object].getHolder().lockCanvas(null). The problem is that lockCanvas is returning an invalid value (null, on this case).</p>
  
  <p>I can't catch this exception because I... can't! :/</p>
  
  <p>This is my code:</p>
  
  <pre><code>package game;
  
  import game.logics.SceneGroup;
  import game.scenes.TeamScene;
  import java.util.Timer;
  import java.util.TimerTask;
  import android.app.Activity;
  import android.content.Context;
  import android.graphics.Canvas;
  import android.graphics.Color;
  import android.os.Bundle;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  import android.view.Window;
  import android.view.WindowManager;
  
  // Definição da Atividade
  public class GameActivity extends Activity {
      // Definição do Ambiente
      public class GameSurface extends SurfaceView
                                       implements SurfaceHolder.Callback {
          public GameSurface(final Context context) {
              super(context);
  
              this.getHolder().addCallback(this);
              this.setFocusable(true);
          }
  
          @Override
          public void surfaceChanged(final SurfaceHolder arg0,
                          final int arg1, final int arg2, final int arg3) {}
  
          @Override
          public void surfaceCreated(final SurfaceHolder arg0) {
              GameActivity.this.running = true;
          }
  
          @Override
          public void surfaceDestroyed(final SurfaceHolder arg0) {
              GameActivity.this.running = false;
          }
  
          public void update(final Canvas canvas) {
              GameActivity.this.scenes.update(canvas);
          }
      }
  
      class GameTask extends TimerTask {
          @Override
          public void run() {
              if(GameActivity.this.running == false) {
                  return;
              }
  
              final SurfaceHolder holder = 
                                  GameActivity.this.surface.getHolder();
  
              Canvas canvas = null;
              try {
                  canvas = holder.lockCanvas();
                  canvas.drawColor(Color.BLACK);
  
                  synchronized(holder) {
                      GameActivity.this.surface.update(canvas);
                  }
              }
              finally {
                  if(canvas != null) {
                      holder.unlockCanvasAndPost(canvas);
                  }
              }
          }
      }
  
      private GameSurface     surface;
      private SceneGroup      scenes;
  
      private Timer           timer;
      private TimerTask       task;
      private boolean         running = false;
  
      @Override
      public void onCreate(final Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          this.requestWindowFeature(Window.FEATURE_NO_TITLE);
          this.getWindow().setFlags(
                              WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
  
          // ### SOLVE: PROBLEM START HERE ###
          this.surface = new GameSurface(this);
  
          this.scenes = new SceneGroup(this);
          this.scenes.add(new TeamScene(this));
  
          this.timer = new Timer();
          this.task = new GameTask();
  
          // ### SOLVE: PROBLEM END HERE ###
          // ### Invalid new instance of GameSurface ###
          this.setContentView(new GameSurface(this));
      }
  
      @Override
      public void onPause() {
          super.onPause();
          this.timer.cancel();
      }
  
      @Override
      public void onResume() {
          super.onResume();
          this.timer.scheduleAtFixedRate(this.task, 0, 33);
      }
  }
  </code></pre>
  
  <p>I'm doing right?
  What I can do to fix my code?</p>