gpt4 book ai didi

android - 使用 RxJava 处理成本高昂的操作

转载 作者:行者123 更新时间:2023-11-29 20:52:08 24 4
gpt4 key购买 nike

我对 RxJava 很陌生,所以我仍然很难使用它。我读了很多博客文章之类的,但我还是有点迷茫。

所以 - 我想获取所有已安装应用程序的列表。很简单。我没有在异步任务中运行它,而是尝试更花哨一点并使用 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 中启动方法 - 没有运气。

正确的做法是什么?

最佳答案

重新记录你的代码,它可以像这样重写:

 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 会将您的订阅代码调用到一个新线程中。

关于android - 使用 RxJava 处理成本高昂的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28858111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com