An Android task queue library. Support priority, timeout, multiple execution, exclusive task and retry.
repositories {
...
maven { url "https://jitpack.io" }
}
dependencies {
...
compile 'com.github.NeoLSN:TaskQueue:1.0.2'
}Establish a task pool for app.
publicclassTaskQueueApplicationextendsApplication {
privateTaskPooltaskPool;
@OverridepublicvoidonCreate() {
super.onCreate();
...
taskPool = newTaskPool(newExecutorDelivery(newHandler(Looper.getMainLooper())));
taskPool.start();
}
publicTaskPoolgetTaskPool() {
returntaskPool;
}
}Add task to pool
TaskQueueApplicationapp = (TaskQueueApplication) getApplication();
TaskPooltaskPool = app.resetTaskPool();
Task<?, ?> task = ... //create you own tasktaskPool.add(task);Task
publicabstractclassTask<I, O> {
publicvoidcancel();
// task statuspublicbooleanisPending();
publicbooleanisExecuting();
publicbooleanisDone();
publicbooleanisCanceled();
publicbooleanisTimeout();
publicStategetState();
publicObjectgetTag();
publicvoidsetTag(Objecttag);
publiclonggetTimeout();
publicvoidsetTimeout(longtimeout, TimeUnitunit);
publicvoidresetTimeout();
publicPrioritygetPriority();
// Set priority before it is add to pool.publicvoidsetPriority(Prioritypriority);
publicintgetSequence();
publicRetryPolicygetRetryPolicy();
publicvoidsetRetryPolicy(RetryPolicyretryPolicy);
// Only one task be executed at one time in the pool if the tasks' key are the same.publicabstractStringgetExclusiveKey();
publicabstractvoidsetData(Idata);
publicabstractIgetData();
protectedabstractvoiddeliverResult(Oresult);
protectedabstractOonExecute() throwsException;
protectedvoidonFinish();
}TaskPool
publicclassTaskPool {
// Default using - Executors.newCachedThreadPool()protectedExecutorServicecreateExecutor();
publicvoidstart();
publicvoidstop();
// Return null when pool is stopped.public <I, O> Task<I, O> add(Task<I, O> task);
publicintsize();
publicList<Task<?, ?>> getTasks(RequestFilterfilter);
publicList<Task<?, ?>> getTasks();
publicList<Task<?, ?>> getTasksByTag(finalObjecttag);
publicList<Task<?, ?>> getTasksByExclusiveKey(finalStringkey);
publicvoidcancel(RequestFilterfilter);
publicvoidcancelAll();
publicvoidcancelByTag(finalObjecttag);
publicvoidcancelByExclusiveKey(finalStringkey);
publicinterfaceRequestFilter {
booleanapply(Task<?, ?> task);
}
public <I, O> voidaddTaskListener(TaskPoolListener<I, O> listener);
public <I, O> voidremoveTaskListener(TaskPoolListener<I, O> listener);
publicinterfaceTaskPoolListener<I, O> {
voidonAdd(Task<I, O> task, intsize);
voidonRemove(Task<I, O> task, intsize);
}
}ResultDelivery
For task pool to deliver the result to specified thread
publicinterfaceResultDelivery {
publicvoidpostResult(Task<?, ?> task, Result<?> result);
publicvoidpostResult(Task<?, ?> task, Result<?> result, Runnablerunnable);
publicvoidpostError(Task<?, ?> task, Throwableerror);
}RetryPolicy
Do nothing if it needs to retry. Throw an error if it can't retry.
publicinterfaceRetryPolicy {
publicvoidretryOrNot(Throwableerror) throwsThrowable;
}