Android RxJava observeOn currentThread调用opengl函数
我正在开发一个简单的学习游戏。 我从一个文件中读取了大量图像,而不是将其加载到GL环境,这需要10秒钟,因此我在python中寻找类似asyncio的东西以减少时间,并找到了许多人用于异步功能的RxJava库 这是我在表面上做的事情,在我的GLSURFACHEVIEW中有所改变Android RxJava observeOn currentThread调用opengl函数,android,asynchronous,opengl-es,rx-java,Android,Asynchronous,Opengl Es,Rx Java,我正在开发一个简单的学习游戏。 我从一个文件中读取了大量图像,而不是将其加载到GL环境,这需要10秒钟,因此我在python中寻找类似asyncio的东西以减少时间,并找到了许多人用于异步功能的RxJava库 这是我在表面上做的事情,在我的GLSURFACHEVIEW中有所改变 Log.d("THREAD", "processing item on thread " + Thread.currentThread().getName()); List<
Log.d("THREAD", "processing item on thread " + Thread.currentThread().getName());
List<NXNode> tileList = new ArrayList();
src.getChild("tile").iterator().forEachRemaining(tileList::add);
Observable.just(tileList)
.flatMapIterable(child -> child)
.subscribeOn(Schedulers.io())
.flatMap(tilenode -> Observable.just(new Tile((NXNode) tilenode, tileset)))
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(tile -> {Log.d("THREAD", "processing item on thread " + Thread.currentThread().getName());
tile.loadGLTexture();})
.subscribe(tile -> putTile((Byte) tile.getZ(), tile));
我需要使用什么计划程序使doOnNext在当前线程上运行
找不到任何解决方案或任何有关此问题的文档信息。看来我参加聚会迟到了,但这个答案可能会帮助其他人。看看简言之,您不应该在主线程上调用
tile.loadGLTexture()
方法,而应该“要求”GLSurfaceView
自己运行任务GLThread
。请尝试以下操作:
.doOnNext(tile -> {
this.queueEvent(() -> {
Log.d("THREAD", "processing item on thread " + Thread.currentThread().getName());
tile.loadGLTexture();
}
})
看来我来晚了,但也许这个答案会对其他人有所帮助。看看简言之,您不应该在主线程上调用
tile.loadGLTexture()
方法,而应该“要求”GLSurfaceView
自己运行任务GLThread
。请尝试以下操作:
.doOnNext(tile -> {
this.queueEvent(() -> {
Log.d("THREAD", "processing item on thread " + Thread.currentThread().getName());
tile.loadGLTexture();
}
})