我对RxJava很新,所以我仍然很难使用它。 我阅读了很多博客文章等等,而且我还有点失落。
所以 - 我想获得所有已安装应用的列表。很简单。而不是在asynchtask中运行它我试图更加花哨并使用RxJava。
我的想法是做这样的事情:
private void test(){
Observable.from(getInstalledApps(true))
.observeOn(Schedulers.newThread())
.map(s -> s.appname)
.subscribe(s -> L.d(TAG, "app: " + s));
}
但后来我意识到这不起作用,因为“observeOn”仅适用于.map,而不适用于方法本身。
之后我尝试用一些空值提供Observable,并在.map内启动方法 - 没有运气。
这样做的正确方法是什么?
答案 0 :(得分:2)
记住你的代码,它可以像这样重写:
List apps = getInstalledApps(true)
Observable.from()
.observeOn(Schedulers.newThread())
.map(s -> s.appname)
.subscribe(s -> L.d(TAG, "app: " + s));
如您所见,将在当前线程中调用getInstalledApp
。你必须“打败”这个电话。为此,您可以构建自己的Observable:
Observable<List> myObs = Observable.create(subscriber -> {
List result = getInstalledApp(true);
subscriber.onNext(result);
subscriber.onCompleted();
});
然后您可以与Observable
:
myObs.subscribeOn(Schedulers.newThread()).subscribe();
像这样,您的Observable会将您的订阅代码调用到一个新线程中。