com.path.android.jobqueue.nonPersistentQueue
Class TimeAwarePriorityQueue

java.lang.Object
  extended by com.path.android.jobqueue.nonPersistentQueue.MergedQueue
      extended by com.path.android.jobqueue.nonPersistentQueue.TimeAwarePriorityQueue
All Implemented Interfaces:
JobSet

public class TimeAwarePriorityQueue
extends MergedQueue

This is a MergedQueue class that can handle queue updates based on time. It uses two queues, one for jobs that can run now and the other for jobs that should wait. Upon retrieval, if it detects a job in delayed queue that can run now, it removes it from there, adds it to S0 and re-runs the operation. This is not very efficient but provides proper ordering for delayed jobs.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.path.android.jobqueue.nonPersistentQueue.MergedQueue
MergedQueue.SetId
 
Constructor Summary
TimeAwarePriorityQueue(int initialCapacity, java.util.Comparator<JobHolder> comparator)
          When retrieving jobs, considers current system nanotime to check if jobs are valid.
 
Method Summary
 CountWithGroupIdsResult countReadyJobs(java.util.Collection<java.lang.String> excludeGroups)
           
 CountWithGroupIdsResult countReadyJobs(long now, java.util.Collection<java.lang.String> excludeGroups)
           
protected  JobSet createQueue(MergedQueue.SetId setId, int initialCapacity, java.util.Comparator<JobHolder> comparator)
          create a PriorityQueue with given comparator
protected  MergedQueue.SetId decideQueue(JobHolder jobHolder)
          decides which queue should the job holder go if first queue, should return 0 if second queue, should return 1 is only called when an item is inserted.
 
Methods inherited from class com.path.android.jobqueue.nonPersistentQueue.MergedQueue
clear, countReadyJobs, countReadyJobs, findById, offer, peek, peekFromQueue, poll, pollFromQueue, remove, size
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TimeAwarePriorityQueue

public TimeAwarePriorityQueue(int initialCapacity,
                              java.util.Comparator<JobHolder> comparator)
When retrieving jobs, considers current system nanotime to check if jobs are valid. if both jobs are valid or both jobs are invalid, returns based on regular comparison

Parameters:
initialCapacity -
comparator -
Method Detail

decideQueue

protected MergedQueue.SetId decideQueue(JobHolder jobHolder)
Description copied from class: MergedQueue
decides which queue should the job holder go if first queue, should return 0 if second queue, should return 1 is only called when an item is inserted. methods like remove always call both queues.

Specified by:
decideQueue in class MergedQueue
Returns:

createQueue

protected JobSet createQueue(MergedQueue.SetId setId,
                             int initialCapacity,
                             java.util.Comparator<JobHolder> comparator)
create a PriorityQueue with given comparator

Specified by:
createQueue in class MergedQueue
Parameters:
setId -
initialCapacity -
comparator -
Returns:

countReadyJobs

public CountWithGroupIdsResult countReadyJobs(long now,
                                              java.util.Collection<java.lang.String> excludeGroups)

countReadyJobs

public CountWithGroupIdsResult countReadyJobs(java.util.Collection<java.lang.String> excludeGroups)