title: Android crash when app is closed and reopened
body: <p>I have a really simple android app that just displays a blank white screen. When I close the app by pressing the HOME button, then try to open the app again, it crashes and I get the "Force Close" button. In Eclipse I'm getting this error, "ActivityManager: Warning: Activity not started because the  current activity is being kept for the user.". How do I fix this crash?</p>
  
  <pre><code>public class HelloAndroid extends Activity {
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(   WindowManager.LayoutParams.FLAG_FULLSCREEN,   
                              WindowManager.LayoutParams.FLAG_FULLSCREEN); 
  
      setContentView(new Panel(this));
  }
  
  class Panel extends SurfaceView implements SurfaceHolder.Callback {
  
      private TutorialThread _thread;
  
      public Panel(Context context) {
          super(context);
  
          // register our interest in hearing about changes to our surface
          SurfaceHolder holder = getHolder();
          holder.addCallback(this);
          _thread = new TutorialThread(holder, this);
  
          setFocusable(true);
      }
  
      @Override
      public void onDraw(Canvas canvas) {
  
          // Clear the background
          canvas.drawColor(Color.WHITE);
      }
  
      @Override
      public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
          // resize canvas here
      }
  
      @Override
      public void surfaceCreated(SurfaceHolder holder) {
          _thread.setRunning(true);
          _thread.start();
      }
  
      @Override
      public void surfaceDestroyed(SurfaceHolder holder) {
          // simply copied from sample application LunarLander:
          // we have to tell thread to shut down &amp; wait for it to finish, or else
          // it might touch the Surface after we return and explode
          boolean retry = true;
          _thread.setRunning(false);
          while (retry) {
              try {
                  _thread.join();
                  retry = false;
              } catch (InterruptedException e) {
                  // we will try it again and again...
              }
          }
      }
  }
  
  class TutorialThread extends Thread {
      private SurfaceHolder _surfaceHolder;
      private Panel _panel;
      private boolean _run = false;
  
      public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) {
          _surfaceHolder = surfaceHolder;
          _panel = panel;
      }
  
      public void setRunning(boolean run) {
          _run = run;
      }
  
      @Override
      public void run() {
          Canvas c;
          while (_run) {
              c = null;
              try {
                  c = _surfaceHolder.lockCanvas(null);
                  synchronized (_surfaceHolder) {
                      _panel.onDraw(c);
                  }
              } finally {
                  // do this in a finally so that if an exception is thrown
                  // during the above, we don't leave the Surface in an
                  // inconsistent state
                  if (c != null) {
                      _surfaceHolder.unlockCanvasAndPost(c);
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Adding the LogCat</p>
  
  <pre><code>03-15 15:36:05.579: INFO/AndroidRuntime(4441): NOTE: attach of thread 'Binder Thread #2' failed
  03-15 15:36:05.719: DEBUG/AndroidRuntime(4449): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; AndroidRuntime START &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
  03-15 15:36:05.719: DEBUG/AndroidRuntime(4449): CheckJNI is OFF
  03-15 15:36:05.719: DEBUG/dalvikvm(4449): creating instr width table
  03-15 15:36:05.759: DEBUG/AndroidRuntime(4449): --- registering native functions ---
  03-15 15:36:05.969: INFO/ActivityManager(1294): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.helloandroid/.HelloAndroid }
  03-15 15:36:05.979: DEBUG/Launcher(1371): onPause+
  03-15 15:36:05.979: DEBUG/Launcher.DragController(1371): +endDrag: false
  03-15 15:36:05.979: DEBUG/Launcher.DragController(1371): mDragging == false
  03-15 15:36:05.979: DEBUG/Launcher.DragController(1371): -endDrag: false
  03-15 15:36:05.979: DEBUG/Launcher(1371): onPause-
  03-15 15:36:05.999: DEBUG/AndroidRuntime(4428): Shutting down VM
  03-15 15:36:05.999: DEBUG/AndroidRuntime(4449): Shutting down VM
  03-15 15:36:05.999: WARN/dalvikvm(4428): threadid=1: thread exiting with uncaught exception (group=0x4001d7e0)
  03-15 15:36:06.009: DEBUG/dalvikvm(4449): Debugger has detached; object registry had 1 entries
  03-15 15:36:06.009: INFO/AndroidRuntime(4449): NOTE: attach of thread 'Binder Thread #3' failed
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428): FATAL EXCEPTION: main
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428): java.lang.IllegalThreadStateException: Thread already started.
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at java.lang.Thread.start(Thread.java:1322)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at com.example.helloandroid.HelloAndroid$Panel.surfaceCreated(HelloAndroid.java:55)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.SurfaceView.updateWindow(SurfaceView.java:538)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:206)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.View.dispatchWindowVisibilityChanged(View.java:3888)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:725)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:725)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.ViewRoot.performTraversals(ViewRoot.java:748)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1737)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.os.Handler.dispatchMessage(Handler.java:99)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.os.Looper.loop(Looper.java:123)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at android.app.ActivityThread.main(ActivityThread.java:4627)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at java.lang.reflect.Method.invokeNative(Native Method)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at java.lang.reflect.Method.invoke(Method.java:521)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
  03-15 15:36:06.029: ERROR/AndroidRuntime(4428):     at dalvik.system.NativeStart.main(Native Method)
  03-15 15:36:06.039: WARN/ActivityManager(1294):   Force finishing activity com.example.helloandroid/.HelloAndroid
  03-15 15:36:06.541: WARN/ActivityManager(1294): Activity pause timeout for HistoryRecord{450300c0 com.example.helloandroid/.HelloAndroid}
  03-15 15:36:06.549: DEBUG/Launcher(1371): onResume+
  03-15 15:36:06.549: DEBUG/Launcher.DragController(1371): +endDrag: false
  03-15 15:36:06.549: DEBUG/Launcher.DragController(1371): mDragging == false
  03-15 15:36:06.549: DEBUG/Launcher.DragController(1371): -endDrag: false
  03-15 15:36:06.549: DEBUG/Launcher(1371): onResume-
  03-15 15:36:08.645: ERROR/KINETO(1370): KLOG0C3- xmk_QueryOSQueue SDL Queue empty : WAIT_FOREVER 
  </code></pre>