title: android: Is your activity running? Dialog box unable to show upon OnFinish
body: <p>I have an view called <code>SpotOnView</code>, and is extending on <code>Game_shooting_AB</code>. Coding as follows.</p>
  
  <h1>Background:</h1>
  
  <p>In the SpotOnView there is a countdown timer. When the time is up, the game is over, and a dialog box will popup to ask whether the user would like to quit or play again.</p>
  
  <h1>SpotOnView Code:</h1>
  
  <pre><code>public class SpotOnView extends View 
  {
     ......
    // constructs a new SpotOnView
     public SpotOnView(Context context, RelativeLayout parentLayout)
     {
        super(context);          
        resources = context.getResources();            
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ....    
  
     } 
  
  
     public void start_timer() 
     {
          if (!timerHasStarted) 
          {
              countDownTimer.start();
              timerHasStarted = true;
          } 
          else 
          {
              countDownTimer.cancel();
              timerHasStarted = false;
          }
     }
  
      public class MyCountDownTimer extends CountDownTimer 
      {
          public MyCountDownTimer(long startTime, long interval) 
          {
              super(startTime, interval);
          }
  
          @Override
          public void onFinish() 
          {
              text.setText("Time's up!");
                 ((Game_shooting_AB)getContext()).replay_dialog();  //LINE 181
          }
  
          @Override
          public void onTick(long millisUntilFinished) 
          {
              ....
          }
      }
  </code></pre>
  
  <h1>Game_shooting_AB Code:</h1>
  
  <pre><code>   public void onCreate(Bundle savedInstanceState) 
     {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_shooting);
  
        // create a new SpotOnView and add it to the RelativeLayout
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout);
        view = new SpotOnView(this, layout);                                          //EXTENDING HERE
        layout.addView(view, 0); // add view to the layout
      ....
  }
  
  
  
  public void replay_dialog()    
  {
      final Dialog dialog1 = new Dialog(Game_shooting_AB.this, android.R.style.Theme_Translucent_NoTitleBar);
      WindowManager.LayoutParams lp = dialog1.getWindow().getAttributes();
      lp.dimAmount = 0.7f;
      dialog1.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
  
      Window window = dialog1.getWindow();
      window.setGravity(Gravity.CENTER);
  
      dialog1.setContentView(R.layout.alert_dialog_replay_shooting);
      dialog1.setCancelable(false);
      dialog1.show();     //LINE 431
      ....
  </code></pre>
  
  <h1>Logcat:</h1>
  
  <p>The necessary line numbers have added as comment in the above codes.</p>
  
  <pre><code>11-22 00:16:34.365: W/dalvikvm(1105): threadid=1: thread exiting with uncaught exception (group=0x41f342a0)
  11-22 00:16:34.370: E/AndroidRuntime(1105): FATAL EXCEPTION: main
  11-22 00:16:34.370: E/AndroidRuntime(1105): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@43304558 is not valid; is your activity running?
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:708)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:346)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.view.Window$LocalWindowManager.addView(Window.java:554)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.app.Dialog.show(Dialog.java:277)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at com.app.abc.Game_shooting_AB.replay_dialog(Game_shooting_AB.java:431)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at com.app.abc.SpotOnView$MyCountDownTimer.onFinish(SpotOnView.java:181)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.os.Handler.dispatchMessage(Handler.java:99)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.os.Looper.loop(Looper.java:137)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at android.app.ActivityThread.main(ActivityThread.java:4898)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at java.lang.reflect.Method.invokeNative(Native Method)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at java.lang.reflect.Method.invoke(Method.java:511)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
  11-22 00:16:34.370: E/AndroidRuntime(1105):     at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <h1>Question:</h1>
  
  <p>The logcat shows
      is your activity running?</p>
  
  <ol>
  <li><p>I know that the dialog need to have a base to showup. But how could the code be modified? </p></li>
  <li><p>Would it be possible to code and show the dialog in the <code>SpotOnView</code> instead of writing in the <code>Game_shooting_AB</code> code?</p></li>
  <li><p>I have tried to modify the code by moving the class MyCountDownTimer and method replay_dialog back to Game_shooting_AB, but the same error still comes out. I would like to ask whether the OnFinish of the MyCountDownTimer will bring the Activity to finish such that the dialog does not able to find base to be shown on?</p></li>
  </ol>
  
  <p>Thanks so much!!</p>