web-dev-qa-db-ja.com

メインスレッドでコールバックを実行

Android Facebook SDK、Asynchronouslyと対話するコードがあります。残念なことに、返されるときはバックグラウンドスレッドにあります。

Cocos-2dxは、特に、Directorにシーンを切り替えるように指示するようなことをするとき(Open GLが関係するため)、メインスレッドでメインスレッドと対話することを好みます。

メインスレッドで実行するコードを取得する方法はありますか?

22
James Campbell

コンテキストがある限り、次のようなことができます。

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

UIスレッドでコードを実行するには:

mainHandler.post(new Runnable() {

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

kaka が示唆するとおり:

Static Looper.getMainLooper() を使用することもできます

アプリケーションのメインルーパーを返します。これは、アプリケーションのメインスレッドに存在します。

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

C++の場合:

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

次の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
 });
0
Domenico