cas*_*orz 17 java android rx-java rx-android
我对RxJava很新,所以这可能是一个愚蠢的问题.我将描述我的情景.
我在UI线程上运行了一些代码,它们将更新一些图像,但这些图像不是很重要,它们在生成它们时消耗了一些资源,所以我想在单个线程上生成它们(当然不是UI线程)和逐个生成它们.我猜蹦床调度程序是我想要的,但我的问题是,如果我使用它然后它在UI线程上工作,我希望它在另一个线程上做.
显然我可以编写自己的线程,我可以在其中对项目进行排队,然后逐个处理这些,但我想RxJava可能会有一个简单的解决方案吗?
我当前的代码如下所示:
Observable<Bitmap> getImage = Observable.create(new Observable.OnSubscribe<Bitmap>() {
@Override public void call(Subscriber<? super Bitmap> subscriber) {
Log.w(TAG,"On ui thread? "+ UIUtils.isRunningOnUIThread());
subscriber.onNext(doComplexTaskToGetImage());
subscriber.onCompleted();
}
});
getImage.subscribeOn(Schedulers.trampoline()).subscribe(new Action1<Bitmap>() {
@Override public void call(Bitmap bitmap) {
codeToSetTheBitmap(bitmap);
}
});
Run Code Online (Sandbox Code Playgroud)
我的日志上写着"On ui thread?" 永远都是如此.那么我如何使代码和所有后续尝试做同样的事情按顺序在单个线程(而不是ui线程)上运行而不编写一堆代码来排队工作?
编辑:
我相信现在可以使用Schedulers.single()或者如果你想要你自己可以使用它new SingleScheduler().我还在测试,但是当我发布这个帖子时,我认为它确实符合我的要求.
cor*_*992 15
您可以创建一个可重复使用的线程创建Scheduler了Observable以下列方式之一:
ThreadPoolExecuter池大小为1(这Executors.newSingleThreadExecutor()是一个方便的静态工厂方法),然后使用它通过该Schedulers.from()方法生成调度程序.Scheduler实现,它使用a Handler来调度操作,因此可以通过将其传递给factory方法与任何Thread已Looper运行的实现Handler一起使用AndroidSchedulers.handlerThread().请注意,Scheduler如果您在完成这些任务时与UI进行交互,则需要在主线程上进行观察.
Alb*_*lvo 12
在RxJava 2中,您可以使用以下Schedulers.single()内容:
返回默认的,共享的,单线程支持的Scheduler实例,用于需要在同一后台线程上执行强序执行的工作.
有关更多详细信息,请参阅文档.
我在RxJava 1 Schedulers文档中看不到它.
| 归档时间: |
|
| 查看次数: |
13123 次 |
| 最近记录: |