libGDX的线程

原文作者:libGDX
原文地址:https://github.com/libgdx/libgdx/wiki/Threading
译文作者:Jianan - qinxiandiqi@foxmail.com
版本信息:本文基于2018-08-26版本翻译
译文版权:CC BY-NC-ND 4.0,允许复制转载,但必须保留译文作者署名及译文链接。


所有ApplicationListener接口中的方法都会在同个OpenGL的渲染线程中被调用。对于大多数游戏来说,一般在ApplicationListener.render()方法中实现游戏的更新逻辑,这个方法会在渲染线程中执行。

任何涉及OpenGL的图形操作都需要在渲染线程上执行。如果在其它线程上执行会导致一些无法预测的结果,这是因为OpenGL Context只有在渲染线程中才处于激活状态,对于大多数Android设备而言,在其它线程中创建OpenGL Context会导致一些问题,因此不支持这种操作。

要从其它线程传递数据到渲染线程,我们建议使用Application.postRunnable()。渲染线程在渲染下一帧,并且在ApplicationListener.render()方法回调之前会执行Runnable中的代码。

new Thread(new Runnable() {
   @Override
   public void run() {
      // do something important here, asynchronously to the rendering thread
      final Result result = createResult();
      // post a Runnable to the rendering thread that processes the result
      Gdx.app.postRunnable(new Runnable() {
         @Override
         public void run() {
            // process the result, e.g. add it to an Array<Result> field of the ApplicationListener.
            results.add(result);
         }
      });
   }
}).start();


libGDX有哪些类是线程安全的?


除非在类文档中明确标记为线程安全,否则libgdx中的类都不是线程安全的。

假如要操作图形或音频相关的内容,你永远不应该对这些操作进行多线程处理,例如,在多个线程中处理scene2D组件。


HTML5


JavaScript本质上是单线程的,所以不可能进行多线程操作。或许Web Workers会是将来的实现方式,不过,这种方式的数据是通过线程之间的消息传递来传递的。而Java的线程使用的是不同的原理和机制,并不能直接将Java的线程代码移植到Web Workers。


上一篇|libGDX的日志
下一篇|与特定平台相关的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值