Skip to content

A job scheduler based on RxJava2 Scheduler API,it can schedule job in group and priority.(基于RxJava2的scheduler实现的具备按照优先级和分组进行调度的任务调度器,使用强大的RxJava提供事件回调、线程调度工作。类库仅提供了最纯粹的调度功能)

License

Notifications You must be signed in to change notification settings

easilycoder/RxJobScheduler

Repository files navigation

关于JobScheduler的使用说明

这是一个基于RxJava2的Scheduler API实现的一个任务调度器,因此最佳的使用场景是结合RxJava使用。这个库可以解决以下的问题:

  • 使用后台线程执行耗时的任务操作

  • 根据优先级调度任务

  • 对任务进行分组

类库的使用

类库的核心主要是ExecutorProvider以及Scheduler

  • ExecutorProvider

    线程池提供者。主要负责提供任务调度执行所需要的线程。类库当中提供了两个实现。

    • JobExecutorProvider

      内部持有了一个根据运行时环境的核心数确定的可重复利用的固定线程数的线程池

    • UIThreadExecutorProvider

      内部通过ui线程的Handler进行消息发送,达到ui线程调度任务的目的

  • Scheduler

    任务调度者。实际负责任务的入队和出队操作。类库当中只提供了一个实现

    • PriorityScheduler

      具备优先级和分组调度功能的调度者。值得注意的是,PriorityScheduler本身并没有实现RxJava的Scheduler,它只是负责了统一的线程池和队列的管理,实际实现了Scheduler的并进行调度的是其内部的InnerPriorityScheduler,因此实际构造返回的也是这个实例。

构造Scheduler

参考RxJava的工具类Schedulers,类库当中提供了一个JobSchedulers,其中可以提供了以下三种(以及对应的各种重载方法)方法获取对应的Scheduler

  • Scheduler job(@Priority int priority, String groupId)

    返回一个InnerPriorityScheduler的实例,所有被添加调度的任务都会执行在后台线程当中

  • Scheduler main(@Priority int priority, String groupId)

    返回一个InnerPriorityScheduler的实例,所有被添加调度的任务都会执行ui线程

  • Scheduler from(@NonNull ExecutorProvider executorProvider)

    返回一个InnerPriorityScheduler的实例,添加调度的任务会执行在自定义的线程池策略当中。

添加任务

使用这个库,与一贯的使用RxJava的方式一致,只要在subscribeOn(@NonNull Scheduler scheduler)传入PriorityScheduler#InnerPriorityScheduler的实例即可

任务取消

取消任务分两种情况,一种是取消单个任务,一种是取消分组任务:

  • 取消单个任务

    使用RxJava的事件定于模型,保存subscribe()后返回的Disposable,并调用它的dispose()方法取消订阅事件即可取消任务执行

  • 取消分组任务

    返回的InnerPriorityScheduler 的实例中有一个cancelGroup(@NonNull String groupId)的API,可以取消分组尚未执行的任务

类库执行细节说明

  • 类库的优先级调度功能主要依赖于PriorityBlockingQueueComparableRunner。能根据传入的priority进行排队,并且支持优先级相同的情况下,先进先出

  • 类库构造的Scheduler对象是一个InnerPriorityScheduler,它是PriorityScheduler的一个内部类,PriorityScheduler对象是一个全局单例对象,提供线程池和排队队列。

  • 类库仅负责将任务按照策略调度在业务制定的线程池,至于任务的回调、线程切换等职责都是使用RxJava本身的特性。类库唯一支持定制的东西是ExecutorProvider,通过实现这个接口可以定制自己的线程策略。

About

A job scheduler based on RxJava2 Scheduler API,it can schedule job in group and priority.(基于RxJava2的scheduler实现的具备按照优先级和分组进行调度的任务调度器,使用强大的RxJava提供事件回调、线程调度工作。类库仅提供了最纯粹的调度功能)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published