title: Firebase JobDispatcher - how does it work compared to previous APIs (JobScheduler and GcmTaskService)?
body: <h2>Background</h2>
  
  <p>Google has multiple solutions for job/task scheduling, such as <code>JobScheduler</code> and <code>GcmTaskService</code>. Each has its own advantages and disadvantages.</p>
  
  <p>Recently, Google presented a new library called "Firebase JobDispatcher".</p>
  
  <h2>The problem</h2>
  
  <p>Sadly, there is very little to read about this new API. In fact, it's really hard to find anything about it.</p>
  
  <p>Only thing I've found is their <a href="https://youtu.be/VC2Hlb22mZM?t=1829" rel="noreferrer">announcement video</a> and <a href="https://github.com/firebase/firebase-jobdispatcher-android" rel="noreferrer">a sample</a>. But even their, there is not much to know about this API.</p>
  
  <h2>The questions</h2>
  
  <p>Looking at previous questions, investigations and comparisons I had with the other APIs (<a href="https://stackoverflow.com/q/31426052/878126">here</a>, for example), I'd like to ask how the new API works and know what to take into consideration when using it:</p>
  
  <ol>
  <li><p>Can a job have parameters that stay with it and can even be modified when needed? They say in the sample "<em>An optional Bundle of user-supplied extras. The default is an empty Bundle.</em>" Is this it? Can it be modified by the job upon execution of it?</p></li>
  <li><p>Can jobs be re-scheduled easily? It is said "<em>A boolean indicating whether the Job should repeat</em>" . How can it be chosen when to re-schedule? I've tried the sample, and chose "Recurring", but it doesn't seem to run again, only once. </p></li>
  <li><p>Can it be protected vs library's jobs (because of unique ids)?</p></li>
  <li><p>Does it needs extra care when updating the app (as previous APIs did)? Can jobs still be scheduled after an update of the app? Testing on the sample, it seems the jobs are completely gone after an update of the app. Can it be avoided?</p></li>
  <li><p>Does it need <code>RECEIVE_BOOT_COMPLETED</code> in case I want the job to still be scheduled even when the device is restarted? The sample seems to have it.</p></li>
  <li><p>Is it possible to get a list of all scheduled jobs and their information (including parameters), and be able to cancel specific/all of them and even modify them ?</p></li>
  <li><p>Will a job be removed upon clear-data operation of the app?</p></li>
  <li><p>Is it possible to tell the job that it's best that it will run in a range of time (example : between 7:00 and 8:00 in the morning)? It is mentioned "<em>ExecutionWindowTrigger-which specifies a time window in which the Job should be executed</em>". Is that it? What happens when it misses this window?</p></li>
  <li><p>The method <code>onStartJob</code> in <code>JobService</code> class return a boolean and the description for it is "<em>whether there is more work remaining.</em>" What does it mean? What does the <code>needsReschedule</code> parameter of <code>jobFinished</code> method mean? Are they related to each other?</p></li>
  <li><p>Are there any restrictions I should know about? For example minimal &amp; maximal values for each of the functions?</p></li>
  </ol>