package com.mcxiaoke.next.task; import android.os.Bundle; import android.os.Handler; import java.util.concurrent.Callable; /** * User: mcxiaoke * Date: 15/6/16 * Time: 11:50 */ public class TaskBuilder<Result> { public static final boolean ACTIVE_CHECK_DEFAULT = true; Handler handler; TaskQueue queue; Object caller; TaskCallable<Result> action; TaskCallback<Result> callback; Success<Result> success; Failure failure; boolean check; long delayMillis; Bundle extras; /** * 根据结果类型初始化TaskBuilder * * @param resultType Result Type * @param <Result> Result Type * @return TaskBuilder */ public static <Result> TaskBuilder<Result> create(Class<Result> resultType) { return new TaskBuilder<Result>(); } /** * 根据Callable初始化TaskBuilder * * @param action Callable * @param <Result> Result Type * @return TaskBuilder */ public static <Result> TaskBuilder<Result> create(Callable<Result> action) { return new TaskBuilder<Result>().action(action); } /** * 根据Callback初始化TaskBuilder * * @param callback TaskCallback * @param <Result> Result Type * @return TaskBuilder */ public static <Result> TaskBuilder<Result> create(TaskCallback<Result> callback) { return new TaskBuilder<Result>().callback(callback); } /** * 根据Callable,Callback,Caller初始化TaskBuilder * * @param action callable * @param callback callback * @param caller caller * @param <Result> Result Type * @return TaskBuilder */ public static <Result> TaskBuilder<Result> create(Callable<Result> action, TaskCallback<Result> callback, Object caller) { return new TaskBuilder<Result>().action(action).callback(callback).with(caller); } private TaskBuilder() { this.check = ACTIVE_CHECK_DEFAULT; } Task<Result> done() { return TaskFactory.createTask(this); } /** * 根据Builder信息生成Task对象 * * @return Task */ public TaskFuture build() { return done(); } /** * 生成Task对象并运行 * * @return TAG */ public String start() { return done().start(); } /** * 设置caller对象 * * @param caller Task Caller * @return TaskBuilder */ public TaskBuilder<Result> with(final Object caller) { this.caller = caller; return this; } /** * 设置回调接口运行的线程,默认是主线程 * * @param handler Handler * @return TaskBuilder */ public TaskBuilder<Result> dispatch(final Handler handler) { this.handler = handler; return this; } /** * 设置运行此任务的TaskQueue,默认是TaskQueue.getDefault() * * @param queue TaskQueue * @return TaskBuilder */ public TaskBuilder<Result> on(final TaskQueue queue) { this.queue = queue; return this; } /** * 设置是否检查caller的生命周期 * 如果是Activity,检查是否 isFinishing() * 如果是Fragment,检查 isAdded() * * @param check check caller active * @return TaskBuilder */ public TaskBuilder<Result> check(final boolean check) { this.check = check; return this; } /** * 延迟执行 * * @param millis 延迟的毫秒数 * @return TaskBuilder */ public TaskBuilder<Result> delay(final long millis) { this.delayMillis = millis; return this; } /** * 设置额外参数,会通过callback返回 * * @param extras 延迟的毫秒数 * @return TaskBuilder */ public TaskBuilder<Result> extras(final Bundle extras) { this.extras = extras; return this; } /** * 设置需要执行的任务 * * @param action Callable * @return TaskBuilder */ public TaskBuilder<Result> action(final Callable<Result> action) { if (action instanceof TaskCallable) { this.action = (TaskCallable<Result>) action; } else { this.action = new WrappedCallable<Result>(action); } return this; } /** * 设置需要执行的任务 * * @param action Runnable * @return TaskBuilder */ public TaskBuilder<Result> action(final Runnable action) { this.action = new WrappedRunnable<Result>(action); return this; } /** * 设置任务成功时的回调接口 * 优先级高于 callback() * * @param success Success * @return TaskBuilder */ public TaskBuilder<Result> success(final Success<Result> success) { this.success = success; return this; } /** * 设置任务失败时的回调接口 * 优先级高于 callback() * * @param failure Failure * @return TaskBuilder */ public TaskBuilder<Result> failure(final Failure failure) { this.failure = failure; return this; } /** * 设置任务执行的回调接口 * * @param callback TaskCallback * @return TaskBuilder */ public TaskBuilder<Result> callback(final TaskCallback<Result> callback) { this.callback = callback; return this; } }