title: Waiting for a Runnable to complete before running another Runnable
body: <p>I have an Android app with a main tab activity, and several activities within the individual tabs. In my main activity's onCreate(), I have a runnable that creates a list, and in the individual activities, I make use of this list.</p>
  
  <p>In the individual activities's onCreate(), I also have Runnables that operate on the list. However, I need these Runnables to only run when the main tab activity's Runnable completes creating the list, otherwise I'd get a null list. I'm trying to find an elegant way of doing this. Right now, in my main activity's Runnable, I'm setting a global boolean variable isDone, and in my individual activity's Runnable, I'm waiting for isDone to be set via a while loop. This works, but probably isn't the best way of doing so.</p>
  
  <p>Any thoughts?</p>
  
  <p>Thanks.</p>
  
  <p>Edit:
  I'm trying the following code out, but I'm getting runtime errors:</p>
  
  <p>In my MainActivity's Runnable:</p>
  
  <pre><code>mainRunnable = new Runnable() {
    public void run() {
      try {
        generateList();
        synchronized(this) {
        listDone = true;
        notifyAll();
      }
    } catch (Exception e) {
        Log.e("BACKGROUND_PROC", e.getMessage());
      }
    }
  };
  Thread thread = new Thread(null, mainRunnable, "Background");
  thread.start();
  </code></pre>
  
  <p>In my OtherActivity's Runnable:</p>
  
  <pre><code>otherRunnable = new Runnable() {
    public void run() {
      synchronized(MainActivity.mainRunnable) {
        if (!MainActivity.getListDone()) {
          try {
            wait();
          } catch (InterruptedException e) {
          }
        }
      }
    }
  };
  Thread thread = new Thread(null, otherRunnable, "Background");
  thread.start();
  </code></pre>
  
  <p>The mainRunnable seems to run completely, but the otherRunnable seems to cause the app to crash. I get the following error message:</p>
  
  <pre><code>01-10 15:41:25.543: E/WindowManager(7074): Activity com.myapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40539850 that was originally added here
  01-10 15:41:25.543: E/WindowManager(7074): android.view.WindowLeaked: Activity com.myapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40539850 that was originally added here
  </code></pre>