【问题标题】:Run Callback On Main Thread在主线程上运行回调
【发布时间】:2013-10-14 18:02:22
【问题描述】:

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

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

有什么方法可以让一些代码在主线程上运行?

【问题讨论】:

    标签: android cocos2d-x


    【解决方案1】:

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

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

    在 UI 线程上运行代码:

    mainHandler.post(new Runnable() {
    
        @Override
        public void run() {
            // run code
        }
    });
    

    正如kaka建议的那样:

    你也可以使用静态的Looper.getMainLooper()

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

    【讨论】:

    • 您也可以使用静态Looper.getMainLooper(),它“返回应用程序的主循环器,它位于应用程序的主线程中。”.
    • @kaka 酷,不知道,现在已经添加到答案中了:)
    • 帖子不存在了。
    • @PredragManojlovic 有什么参考资料吗?根据文档,它确实developer.android.com/reference/android/os/…
    • @cYrixmorten 我的错。另一个包中也有处理程序,所以我导入错误。对此进行投票。
    【解决方案2】:
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //execute code on main thread
        }
    });
    

    【讨论】:

    • 同样正确,但 runOnUiThread 仅在 Activity 和 Fragment 类中可用
    【解决方案3】:

    在 C++ 中:

    Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
        // execute code on main thread
    });
    

    【讨论】:

      【解决方案4】:

      您可以通过以下两种方式在主线程中运行代码:(使用 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
       });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 2014-03-06
        相关资源
        最近更新 更多