Scheduler
-com.tencent.mm.vending.scheduler.Scheduler定义了线程调度任务的接口,具体线程如何调度由实现决定。框架提供了默认的com.tencent.mm.vending.scheduler.SingleScheduler实现,就是简单的将任务抛到指定的单一线程上。此外还有可以轮询任务的PollScheduler。
-Scheduler在Vending中被广泛使用,pipeline, @FunctionalApi, Callbacks有使用。通常接受Scheduler的函数被定义为$(),参数可以使Scheduler实例,也可以是其对应的Type, String类型。
因为
@FunctionalApi需要指定Scheduler,所以我们通过String类型的Type来对应具体的Scheduler对象
我们内置了三个常用的Scheduler和其类型:
Scheduler.UI- Type值"Vending.UI",变量定义在Scheduler.UI。Scheduler.LOGIC- Type是"Vending.LOGIC",变量定义在Scheduler.LOGIC。Scheduler.HEAVY_WORK- Type是"Vending.HEAVY_WORK",变量定义在Scheduler.HEAVY_WORK。
还有一个特殊的定义:
SchedType.ANY,对应值"Vending.ANY",不对应实际的Scheduler,代表不指定某个Scheduler
如何创建其他Scheduler
创建一个自定义线程的SingleScheduler,只需要创建一个HandlerThread,然后用其Looper创建一个SingleScheduler对象,定义好Scheduler Type名称(要唯一)。最后调用SchedulerProvider.extendScheduler(String type, Scheduler scheduler)即可。
例如:
Scheduler $worker = new SingleScheduler(WorkerThread.getLooper(), "WeChat.WORKER");
SchedulerProvider.extendScheduler("WeChat.WORKER", $worker);
一些接口
-Scheduler提供了一些接口方便使用:
public static synchronized Scheduler current();
-current() 返回当前线程可用的Scheduler,如果不存在则创建一个。
public static Scheduler find(String type);
-find(String type) 根据type返回对应的Scheduler对象