24

我有一些与 Android Facebook SDK 异步交互的代码。不幸的是,这意味着当它返回时它位于后台线程中。

Cocos-2dx 更喜欢我在主线程中与之交互,尤其是在执行诸如告诉 Director 切换场景之类的操作时(因为它涉及到 Open GL)

有没有办法让一些代码在主线程上运行?

4

4 回答 4

54

只要你有一个上下文,你可以做这样的事情:

Handler mainHandler = new Handler(context.getMainLooper());

并在 UI 线程上运行代码:

mainHandler.post(new Runnable() {

    @Override
    public void run() {
        // run code
    }
});

正如卡卡所建议的:

您还可以使用静态Looper.getMainLooper()

返回应用程序的主循环器,它位于应用程序的主线程中。

于 2013-10-14T18:37:30.573 回答
12
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        //execute code on main thread
    }
});
于 2013-10-14T18:47:50.627 回答
5

在 C++ 中:

Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
    // execute code on main thread
});
于 2015-07-31T09:22:25.800 回答
0

您可以通过以下两种方式在主线程中运行代码:(使用 Java 8 的 lambdas)

如果您有一个活动实例:

activity.runOnUiThread(() -> {
     // do your work on main thread
});

否则使用 Handler 对象并发布 Runnable。

postDelayed如果在执行代码之前需要一些延迟,您可以使用该版本。

 Handler handler = new Handler(Looper.getMainLooper());
 handler.post(() -> {
     // do your work on main thread
 });
于 2019-01-11T19:44:04.950 回答