作为一个Android开发者,耳熟能详的一句话就是,Android的主线程不能做耗时操作,具体啥原因也不用多说了。 RxJava作为广泛应用的工具库,不应该没有对耗时操作的处理。对于多线程和并发编程应该有独特的理解。在之前的基础上,我们深入理解RxJava中的调度器(Schedulers)在Android开发中如何以响应式的方式创建网络操作,内存访问,以及耗时任务。
trampoline将会处理它的队列并且按序运行队列中每一个任务。它是repeat()和retry()方法默认的调度器。
调度器(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;