RxJava之调度器(Schedulers)

       作为一个Android开发者,耳熟能详的一句话就是,Android的主线程不能做耗时操作,具体啥原因也不用多说了。  RxJava作为广泛应用的工具库,不应该没有对耗时操作的处理。对于多线程和并发编程应该有独特的理解。在之前的基础上,我们深入理解RxJava中的调度器(Schedulers)在Android开发中如何以响应式的方式创建网络操作,内存访问,以及耗时任务。

调度器(Schedulers)

    io

    Schedulers.io()调度器主要用于I/O操作,它基于根据需要,增长或缩减来自适应的线程池。大量的I/O调度操作将创建许多个线程并占用内存。一如既往的是,我们需要在性能和简捷两者之间找到一个有效的平衡点。

    computation

    Schedulers.computation()调度是精于计算工作的,它也是许多RxJava方法的默认调度器   buffer(),debounce(),delay(),interval(),sample(),skip()。

    immediate

    Schedulers.immediate()调度器主要用于立即在当前线程执行你指定的工作。它是timeout(),timeInterval(),以及timestamp()方法默认的调度器。

    newThread

    Schedulers.newThread()调度器主要用于为指定任务启动一个新的线程。

    trampoline

    Schedulers.trampoline()主要用于延迟工作任务的执行。当我们想在当前线程执行一个任务时,并不是立即,我们可以用.trampoline()将它入队。
    trampoline将会处理它的队列并且按序运行队列中每一个任务。它是repeat()和retry()方法默认的调度器。

非阻塞I/0操作的简单实现

    大家都知道I/O操作是一个耗时操作,如果在主线程进行I/O操作,必然会影响UI操作的流畅性。比如保存照片的过程中放在主线程中进行,在保存的过程中,UI是不能进行交互的。该如何处理即能保存照片又能进行UI操作?大家都会想到开一个线程,将存储操作在线程中进行,不会影响UI交互。在RxJava中,我们习惯使用io调度器进行处理。
 
<span style="font-size:14px;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Django-APScheduler 中,如果您想要使用 SQLAlchemyJobStore 作为调度的作业存储,可以在初始化调度时将 SQLAlchemyJobStore 实例传递给 `jobstores` 参数,如下所示: ```python from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore from sqlalchemy import create_engine engine = create_engine('sqlite:///jobs.sqlite') jobstore = SQLAlchemyJobStore(engine=engine) scheduler = BackgroundScheduler(jobstores={ 'default': jobstore }) ``` 在这里,我们创建了一个名为 `default` 的 SQLAlchemyJobStore 实例,并将其传递给了调度的 `jobstores` 参数。我们也创建了一个 SQLite 数据库引擎,并将其传递给 SQLAlchemyJobStore,以便作业可以持久化到数据库中。 请注意,您需要在数据库中创建一个表来存储作业。可以通过以下方式使用 SQLAlchemyJobStore.create_all() 方法来实现: ```python jobstore.create_all() ``` 现在,您可以使用调度的 API 来添加和管理作业。例如,以下代码将创建一个每分钟执行一次的作业: ```python from datetime import datetime, timedelta from apscheduler.schedulers.background import BackgroundScheduler def job(): print('Hello, world!') scheduler = BackgroundScheduler(jobstores={ 'default': jobstore }) scheduler.add_job(job, 'interval', minutes=1) scheduler.start() ``` 在这个例子中,我们使用 `add_job()` 方法向调度添加一个作业,该作业将每分钟执行一次。当调度启动后,作业将开始运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值