Подтвердить что ты не робот

Запустить обратный вызов на главной теме

У меня есть код, который взаимодействует с Android Facebook SDK, асинхронно. К сожалению, это означает, что когда он возвращается, он находится в фоновом потоке.

Cocos-2dx предпочитает мне взаимодействовать с ним в главной теме, особенно когда вы делаете такие вещи, как рассказывать директору об переключении сцен (поскольку он включает Open GL)

Есть ли способ получить некоторый код для запуска в основном потоке?

4b9b3361

Ответ 1

Пока у вас есть контекст, вы можете сделать что-то вроде этого:

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

И для запуска кода в потоке пользовательского интерфейса:

mainHandler.post(new Runnable() {

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

Как предложено kaka:

Вы также можете использовать статический Looper.getMainLooper(), который

Возвращает основной петлевой механизм приложения, который живет в основном потоке приложения.

Ответ 2

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        //execute code on main thread
    }
});

Ответ 3

В С++:

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

Ответ 4

Вы можете запустить код в главном потоке двумя способами: (с лямбдами Java 8)

Если у вас есть экземпляр активности:

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
 });