手游中android平台在java代码里--->游戏子线程和java主线程的交替运行

来源:互联网 发布:matlab 网络协议仿真 编辑:程序博客网 时间:2024/05/17 07:12

1、cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView)里面,Cocos2dxGLSurfaceView 类,它是cocos2d-x引擎的一部分。opengl的渲染和刷新都是由这个类来完成。 我们不能直接在主线程java方法里调用c++方法来刷新界面,唯一的方法就是绕开javaUI主线程,而这绕开主线程的工作让GLSurfaceView来完成。代码如下(在java代码里):

private static native void javaCallC();private Cocos2dxGLSurfaceView mGLSurfaceView = null;public TimerJavaToC(Cocos2dxActivity act){mGLSurfaceView = Cocos2dxGLSurfaceView.getInstance();init();}public void callCPP(){mGLSurfaceView.queueEvent( new Runnable()             {              @Override               public void run()                 {                //调用jni,到c++               TimerJavaToC.javaCallC();              }               });}

2、更新UI(更新数据)的两种方法是handler和runUiOnThread,更新UI必须得在主线程,否则会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.  


3、游戏里从子线程到主线程也用runUiOnThread.

0 0
原创粉丝点击