public abstract class Job
extends java.lang.Object
implements java.io.Serializable
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_RETRY_LIMIT |
Modifier and Type | Method and Description |
---|---|
void |
assertNotCancelled()
Convenience method that checks if job is cancelled and throws a RuntimeException if it is
cancelled.
|
android.content.Context |
getApplicationContext()
Convenience method to get the application context in a Job.
|
int |
getCurrentRunCount()
Before each run, JobManager sets this number.
|
long |
getDelayInMs()
used by
JobManager to assign proper delay at the time job is added. |
java.lang.String |
getId() |
int |
getPriority()
used by
JobManager to assign proper priority at the time job is added. |
protected int |
getRetryLimit()
By default, jobs will be retried
DEFAULT_RETRY_LIMIT times. |
java.lang.String |
getRunGroupId()
Some jobs may require being run synchronously.
|
java.lang.String |
getSingleInstanceId()
Some jobs only need a single instance to be queued to run.
|
java.util.Set<java.lang.String> |
getTags()
Returns a readonly set of tags attached to this Job.
|
boolean |
isCancelled()
Returns true if job is cancelled.
|
boolean |
isDeadlineReached()
Returns true if the job's deadline is reached.
|
boolean |
isPersistent()
Whether we should add this job to disk or non-persistent queue
|
abstract void |
onAdded()
Called when the job is added to disk and committed.
|
protected abstract void |
onCancel(int cancelReason,
java.lang.Throwable throwable)
Called when a job is cancelled.
|
abstract void |
onRun()
The actual method that should to the work.
|
boolean |
requiresNetwork()
Returns whether job requires a network connection to be run or not.
|
boolean |
requiresUnmeteredNetwork()
Returns whether job requires a unmetered network connection to be run or not.
|
protected abstract RetryConstraint |
shouldReRunOnThrowable(java.lang.Throwable throwable,
int runCount,
int maxRunCount)
If
onRun method throws an exception, this method is called. |
public static final int DEFAULT_RETRY_LIMIT
protected Job(Params params)
public final java.lang.String getId()
public final int getPriority()
JobManager
to assign proper priority at the time job is added.public final long getDelayInMs()
JobManager
to assign proper delay at the time job is added.
This field is not persisted!public final java.util.Set<java.lang.String> getTags()
public final boolean isPersistent()
public abstract void onAdded()
Changes to this class will not be preserved if your job is persistent !!!
Also, if your app crashes right after adding the job, onRun
might be called without an onAdded
call
Note that this method is called on JobManager's thread and will block any other action so it should be fast and not make any web requests (File IO is OK).
public abstract void onRun() throws java.lang.Throwable
shouldReRunOnThrowable(Throwable, int, int)
will be called to
decide either to dismiss the job or re-run it.java.lang.Throwable
- Can throw and exception which will mark job run as failedprotected abstract void onCancel(int cancelReason, java.lang.Throwable throwable)
cancelReason
- It is one of:
throwable
- The exception that was thrown from the last execution of onRun()
protected abstract RetryConstraint shouldReRunOnThrowable(java.lang.Throwable throwable, int runCount, int maxRunCount)
onRun
method throws an exception, this method is called.
If you simply want to return retry or cancel, you can use RetryConstraint.RETRY
or
RetryConstraint.CANCEL
.
You can also use a custom RetryConstraint
where you can change the Job's priority or
add a delay until the next run (e.g. exponential back off).
Note that changing the Job's priority or adding a delay may alter the original run order of the job. So if the job was added to the queue with other jobs and their execution order is important (e.g. they use the same groupId), you should not change job's priority or add a delay unless you really want to change their execution order.
throwable
- The exception that was thrown from onRun()
runCount
- The number of times this job run. Starts from 1.maxRunCount
- The max number of times this job can run. Decided by getRetryLimit()
RetryConstraint
to decide whether this Job should be tried again or not and
if yes, whether we should add a delay or alter its priority. Returning null from this method
is equal to returning RetryConstraint.RETRY
.public final int getCurrentRunCount()
Might be useful for the onRun()
method
public final java.lang.String getRunGroupId()
public final java.lang.String getSingleInstanceId()
onAdded()
, but
only update the resource remotely once with the latest changes.protected int getRetryLimit()
DEFAULT_RETRY_LIMIT
times.
If job fails this many times, onCancel will be called w/o calling shouldReRunOnThrowable(Throwable, int, int)
public final boolean isCancelled()
Note that, if your job returns successfully from onRun()
method, it will be considered
as successfully completed, thus will be added to CancelResult.getFailedToCancel()
list. If you want this job to be considered as cancelled, you should throw an exception.
You can also use assertNotCancelled()
method to do it.
Calling this method outside onRun()
method has no meaning since onRun()
will not
be called if the job is cancelled before it is called.
public void assertNotCancelled()
public android.content.Context getApplicationContext()
This context is set when job is added to a JobManager.
public boolean isDeadlineReached()
Note that this method is safe to access only when the job is running. Value is undefined
if it is called outside the onRun()
method.
public final boolean requiresNetwork()
public final boolean requiresUnmeteredNetwork()