Запустить обратный вызов на главной теме
У меня есть код, который взаимодействует с Android Facebook SDK, асинхронно. К сожалению, это означает, что когда он возвращается, он находится в фоновом потоке.
Cocos-2dx предпочитает мне взаимодействовать с ним в главной теме, особенно когда вы делаете такие вещи, как рассказывать директору об переключении сцен (поскольку он включает Open GL)
Есть ли способ получить некоторый код для запуска в основном потоке?
Ответы
Ответ 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
});