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
对象