Android queueEvent(new Runnable())如果我有多个托管渲染器的线程怎么办?

时间:2017-02-18 04:55:21

标签: android opengl-es

我一直在阅读在线文档,并浏览几本android / OpenGL书籍。这一切都提到了将事件处理程序调用传递或委托给GL渲染线程的一种方法是使用Android queueEvent (来自GLSurfaceView Class的新Runnable(){...})基于我简陋的java知识并没有任何意义..然后我发现了这个问题GLSurfaceView.queueEvent does not execute in the GL thread 在你的评论中有人通过说调用runnable几乎意味着你希望这个类的每个实例都在一个单独的线程中运行来证实我的怀疑?还有一个人说这在这种特殊情况下并不正确,而且queueEvent采用了runnable,并在 现有的 渲染器线程上运行

如果第二个人是对的,我的问题是......如果我有两个单独的线程执行GLRenderer ...在这种情况下哪个线程将执行新的queueEvent(new Runnable())主机的代码? ! 我很困惑..

1 个答案:

答案 0 :(得分:2)

不确定在Renderer类中运行代码的另一个线程在哪里,或者如何(甚至为什么),无论如何,GLSurfaceView在调用setRenderer()时创建一个线程,并且它保持对该线程的引用。 您通常调用queueEvent(new Runnable(){public void run(){mMyRenderer.DoSomething();});从GLSurfaceView里面,它引用了它创建的线程!如果你有另一个也承载你渲染的线程没关系,它可能甚至不可见GLSurfaceView .. bottom-line ... queueEvent使用GLSurfaceView引用(和创建)的线程