J'ai un code qui interagit avec le SDK Facebook Android, de manière asynchrone. Malheureusement, cela signifie qu’à son retour, il se trouve dans un fil d’arrière-plan.
Cocos-2dx préfère que j'interagisse avec elle dans le fil principal, en particulier lorsque vous exécutez des actions telles que demander au directeur de changer de scène (en ce qui concerne Open GL)
Est-il possible d’obtenir du code sur le thread principal?
Tant que vous avez un contexte, vous pouvez faire quelque chose comme ceci:
Handler mainHandler = new Handler(context.getMainLooper());
Et pour exécuter le code sur le thread d'interface utilisateur:
mainHandler.post(new Runnable() {
@Override
public void run() {
// run code
}
});
Comme suggéré par kaka :
Vous pouvez aussi utiliser static Looper.getMainLooper () qui
Renvoie le boucleur principal de l'application, qui réside dans le thread principal de l'application.
runOnUiThread(new Runnable() {
@Override
public void run() {
//execute code on main thread
}
});
En C++:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
// execute code on main thread
});
Vous pouvez exécuter du code dans le thread principal de deux manières: (avec les lambdas de Java 8)
Si vous avez une instance d'activité:
activity.runOnUiThread(() -> {
// do your work on main thread
});
Sinon, utilisez un objet Handler et publiez un Runnable.
Vous pouvez utiliser la version postDelayed
si vous avez besoin d'un peu de temps avant d'exécuter le code.
Handler handler = new Handler(Looper.getMainLooper());
handler.post(() -> {
// do your work on main thread
});