Android Facebook SDK、Asynchronouslyと対話するコードがあります。残念なことに、返されるときはバックグラウンドスレッドにあります。
Cocos-2dxは、特に、Directorにシーンを切り替えるように指示するようなことをするとき(Open GLが関係するため)、メインスレッドでメインスレッドと対話することを好みます。
メインスレッドで実行するコードを取得する方法はありますか?
コンテキストがある限り、次のようなことができます。
Handler mainHandler = new Handler(context.getMainLooper());
UIスレッドでコードを実行するには:
mainHandler.post(new Runnable() {
@Override
public void run() {
// run code
}
});
kaka が示唆するとおり:
Static Looper.getMainLooper() を使用することもできます
アプリケーションのメインルーパーを返します。これは、アプリケーションのメインスレッドに存在します。
runOnUiThread(new Runnable() {
@Override
public void run() {
//execute code on main thread
}
});
C++の場合:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
// execute code on main thread
});
次の2つの方法でメインスレッドでコードを実行できます:(with Java 8's 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
});