RxJava中是否有与RxAndroid中的AndroidSchedulers.mainThread()同义的Scheduler api。因此,如果我在一个新线程上安排一个任务,并且我想在Java主线程上观察它,我将如何做到这一点?
下面的edit是一个RxSubscription示例,带有system。在注释中,主线程被终止,而可观察线程被终止。interval在单独的线程上运行。在Android中,我可以说observeOn(AndroidSchedulers.MainThread),此后的任何操作都将在主线程上运行。我正在寻找Java中类似的调度器,因为AndroidSchedulers是RxAndroid的一部分。
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import rx.Observable;
public class Main {
public static void main(String[] args) throws InterruptedException, IOException {
Observable<Long> values = Observable.interval(1000, TimeUnit.MILLISECONDS);
values.subscribe(
v -> System.out.println("Received: " + v),
e -> System.out.println("Error: " + e),
() -> System.out.println("Completed")
);
//System.in.read();
}
}
是的,RxJava有调度程序。要向任何线程发送消息,你需要有一个某种消息循环来等待来自其他线程的消息。在Android中,这是你的Looper。在Java,你需要自己做这件事。然后你的调度程序会向该线程发送一条消息,并在该消息响应中完成工作。这种机制取决于你如何实现你的消息队列,但应该是相当微不足道的。
目前无法返回“主”Java线程,因为RxJava 1没有阻塞调度程序。x。
如果您可以升级到RxJava 2。x、 我有一个特殊的调度程序,可以“固定”到当前线程:
compile "com.github.akarnokd:rxjava2-extensions:0.15.1"
阻塞调度程序
这种类型的调度程序在“当前线程”上运行其执行循环,更具体地说,是调用其执行()方法的线程。该方法会阻塞,直到调用关闭()。这种类型的调度程序允许从其他线程返回“主”线程。
public static void main(String[] args) {
BlockingScheduler scheduler = new BlockingScheduler();
scheduler.execute(() -> {
Flowable.range(1, 10)
.subscribeOn(Schedulers.io())
.observeOn(scheduler)
.doAfterTerminate(() -> scheduler.shutdown())
.subscribe(v -> System.out.println(v + " on " + Thread.currentThread()));
});
System.out.println("BlockingScheduler finished");
}
问题内容: 我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。 没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。 问题答案: 在谷歌测试
我正在努力翻阅这本生锈的书。在“字符串”一章中,许多示例使用了_string(),我的编译器版本(rustc 1.0.0-dev)给出了以下警告 代码: 我从这个问题中了解到,这是因为API可能会更改,但我想知道如果我想转换字符串片段(str),我应该使用什么来代替它
问题内容: 当我使用MSTest Framework并复制Selenium IDE为我生成的代码时,MSTest无法识别和。有什么替代方法? 问题答案: 您将分别使用和。
在RxJava 2和Reactor中,如果当前流中没有元素,则有一种类似switchIfEmpty的方法来切换到新流。 但是当我开始使用Minute时,当我将Quarkus样本转换为使用反应特性时,我找不到替代方法。 目前我的解决方案是:在我的PostRepository中,我使用一个异常来表示没有找到帖子。 并在中捕获它。 如何在中返回表示0或1元素,并在中使用类似的方法来构建流的替代路径?
我正在使用Java SDK在HarmonyOS中创建一个自定义组件。在那里我必须为动画组件的动画工作。我必须在int值之间动画组件。为此,我需要AnimatorValue的实例(在Android ValueAnimator中)。 在Android中,我们可以创建ValueAnimator的实例并传递int值,如下所示: 但是,在HMOS中,我可以使用下面的代码创建AnimatorValue的实例:
问题内容: 我有一个字符串数组,每个字符串包含3个字母。每3个字母(每个元素)对应一个唯一字母。我需要从字符串数组创建一个char数组。 我能想到的唯一方法是遍历字符串数组中的每个元素,并使用一个长的switch语句来确定其关联的单个字符。 还有什么其他方法可以实现? 问题答案: 如果是映射/查找,那么通常地图/词典可以解决您的问题。C#中的此类结构示例: 如果有这样的映射,则只需从映射中查找字母