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

results matching ""

    No results matching ""