Android RxJava observeOn currentThread调用opengl函数

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<

我正在开发一个简单的学习游戏。 我从一个文件中读取了大量图像,而不是将其加载到GL环境,这需要10秒钟,因此我在python中寻找类似asyncio的东西以减少时间,并找到了许多人用于异步功能的RxJava库

这是我在表面上做的事情,在我的GLSURFACHEVIEW中有所改变

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();
    }
})