title: JobScheduler posting Jobs twice (not expected)
body: <p>I am writing a tutorial on JobScheduler and I find a strange behavior. I ask for 3 differents jobs to be scheduled in 1 second (.setOverrideDeadline(1000)) but they are all submitted and ran twice...
  So here the code:</p>
  
  <pre><code>public class MyApplication extends Application {
      private static final int JOB_ID_HanlderThread = 100;
      private static final int JOB_ID_ExecutorService = 200;
      private static final int JOB_ID_AsyncTask = 300;
      JobScheduler mJobScheduler;
      ExecutorService myExecutorServiceForJobs=null;
      private static MyApplication INSTANCE;
      public static MyApplication getInstance(){
          return INSTANCE;
      }
  
  
      /**
       * Called when the application is starting, before any activity, service,
       * or receiver objects (excluding content providers) have been created.
       * Implementations should be as quick as possible (for example using
       * lazy initialization of state) since the time spent in this function
       * directly impacts the performance of starting the first activity,
       * service, or receiver in a process.
       * If you override this method, be sure to call super.onCreate().
       */
      @Override
      public void onCreate() {
          Log.e("MyApplication", "*********************** onCreate *****************************");
          super.onCreate();
          //use only for the ExceutorService case
          INSTANCE=this;
          //instanciate your JobScheduler
          mJobScheduler= (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
          Log.e("MyApplication", "onCreate: JobScheduler instanciate");
  
          //this first example use the HandlerThread (no need of executor service)
          //---------------------------------------------------------------------
          //define your JobServices here
          JobInfo.Builder builder = new JobInfo.Builder(JOB_ID_HanlderThread,
                  new ComponentName( getPackageName(),
                          MyJobServiceUsingHandlerThread.class.getName() ) );
          //begin in one second
          builder.setOverrideDeadline(1000);
          int returnedValue;
          //the return value is failure(0) or success(1) not the JobId if success (Javadoc wrong)
          returnedValue=mJobScheduler.schedule( builder.build() );
          //launch it
          if( returnedValue &lt;= 0 ) {
              //If something goes wrong (manage exception/error is better than logging them)
              Log.e("MyApplication", "onCreate: JobScheduler launch the task failure");
          }else{
              //nothing goes wrong
              Log.e("MyApplication", "onCreate: JobScheduler launch the task suceess JOB_ID_HanlderThread "+returnedValue);
          }
  
          //this second example use ExecutorService
          //---------------------------------------
          //then again define your Job and launch it
          JobInfo.Builder builder1 = new JobInfo.Builder(JOB_ID_ExecutorService,
                  new ComponentName( getPackageName(),
                          MyJobServiceUsingExecutor.class.getName() ) );
          //begin in one second
          builder1.setOverrideDeadline(1000);
          //launch it
          returnedValue=mJobScheduler.schedule( builder1.build() );
          if( returnedValue &lt;= 0 ) {
              //If something goes wrong (manage exception/error is better than logging them)
              Log.e("MyApplication", "onCreate: JobScheduler launch the task failure");
          }else{
              //nothing goes wrong
              Log.e("MyApplication", "onCreate: JobScheduler launch the task suceess JOB_ID_ExecutorService "+returnedValue);
          }
  
          //this third example use AsyncTask
          //--------------------------------
          //then again define your Job and launch it
          JobInfo.Builder builder2 = new JobInfo.Builder(JOB_ID_AsyncTask,
                  new ComponentName( getPackageName(),
                          MyJobServiceUsingAsyncTask.class.getName() ) );
          //begin in one second
          builder2.setOverrideDeadline(1000);
          //launch it
          returnedValue=mJobScheduler.schedule( builder2.build() );
          if( returnedValue &lt;= 0 ) {
              //If something goes wrong (manage exception/error is better than logging them)
              Log.e("MyApplication", "onCreate: JobScheduler launch the task failure");
          }else{
              //nothing goes wrong
              Log.e("MyApplication", "onCreate: JobScheduler launch the task suceess JOB_ID_AsyncTask "+returnedValue);
          }
      }   
  </code></pre>
  
  <p>Using this code I expect my jobs run once, but if I look at the log I obtain:    </p>
  
  <pre><code>10-20 06:45:13.118 13041-13041/? E/MyApplication: *********************** onCreate *****************************
  10-20 06:45:13.122 13041-13041/? E/MyApplication: onCreate: JobScheduler instanciate
  10-20 06:45:13.126 13041-13041/? E/MyApplication: onCreate: JobScheduler launch the task suceess JOB_ID_HanlderThread 1
  10-20 06:45:13.127 13041-13041/? E/MyApplication: onCreate: JobScheduler launch the task suceess JOB_ID_ExecutorService 1
  10-20 06:45:13.130 13041-13041/? E/MyApplication: onCreate: JobScheduler launch the task suceess JOB_ID_AsyncTask 1
  10-20 06:45:13.559 13041-13041/? E/MyJobServiceHandler: onStartJob called &lt;--------------------------------
  10-20 06:45:13.572 13041-13041/? E/MyJobServiceExecutor: onStartJob called &lt;--------------------------------
  10-20 06:45:14.133 13041-13041/? E/MyJobServiceAsync: onStartJob called &lt;--------------------------------
  10-20 06:45:14.141 13041-13041/? E/MyJobServiceAsync: onStartJob called &lt;--------------------------------
  10-20 06:45:18.571 13041-13066/? E/MyHandler: The work is done in a separate thread called MyJobServiceUsingHandlerThread
  10-20 06:45:18.573 13041-13041/? E/MyJobServiceHandler: onDestroy called, Looper is dead  &lt;******************************************
  10-20 06:45:18.574 13041-13041/? E/MyJobServiceHandler: onStartJob called &lt;--------------------------------
  10-20 06:45:18.576 13041-13067/? E/MyRunnable: The work is done in a separate thread called MyJobServiceUsingExecutorService
  10-20 06:45:18.577 13041-13041/? E/MyJobServiceExecutor: onDestroy called, executor service is dead  &lt;******************************************
  10-20 06:45:18.577 13041-13041/? E/MyApplication: killMyExecutorServiceForJob called
  10-20 06:45:18.577 13041-13041/? E/MyApplication: myExecutorServiceForJobs isShutDown
  10-20 06:45:18.580 13041-13041/? E/MyJobServiceExecutor: onStartJob called &lt;--------------------------------
  10-20 06:45:19.145 13041-13070/? E/MyAsyncTask: The work is done in a separate thread called AsyncTask #1
  10-20 06:45:19.145 13041-13041/? E/MyAsyncTask: The work is finished  &lt;******************************************
  10-20 06:45:23.576 13041-13075/? E/MyHandler: The work is done in a separate thread called MyJobServiceUsingHandlerThread
  10-20 06:45:23.577 13041-13041/? E/MyJobServiceHandler: onDestroy called, Looper is dead  &lt;******************************************
  10-20 06:45:23.582 13041-13076/? E/MyRunnable: The work is done in a separate thread called MyJobServiceUsingExecutorService
  10-20 06:45:23.584 13041-13041/? E/MyJobServiceExecutor: onDestroy called, executor service is dead  &lt;******************************************
  10-20 06:45:23.584 13041-13041/? E/MyApplication: killMyExecutorServiceForJob called
  10-20 06:45:23.584 13041-13041/? E/MyApplication: myExecutorServiceForJobs isShutDown
  10-20 06:45:24.147 13041-13077/? E/MyAsyncTask: The work is done in a separate thread called AsyncTask #2
  10-20 06:45:24.148 13041-13041/? E/MyAsyncTask: The work is finished  &lt;******************************************
  </code></pre>
  
  <p>What I do in the tutorial is I run one Job with HandlerThread, an other one with ExecutorService and the last using AsyncTask to explain how to do the work in a background thread. I show this different technics because there can be use cases where you want to enqueue your jobs in the same thread (HandlerThread) or manage a pool of Thread (ExecutorService) or just use unmanaged threads (AsyncTask).</p>
  
  <p>I define thos Jobs and schedule them in MyApplication:onCreate method.
  To have a deeper look at the code, I put it on GitHub here :<a href="https://github.com/MathiasSeguy-Android2EE/JobSchedulerForGitHub" rel="noreferrer">https://github.com/MathiasSeguy-Android2EE/JobSchedulerForGitHub</a></p>