2013-10-14 18 views
21

Ho un codice che interagisce con l'SDK di Facebook Android, in modo asincrono. Sfortunatamente questo significa che quando ritorna è in un thread in background.Esegui richiamata sulla filettatura principale

Cocos-2dx mi preferisce interagire con esso nel thread principale, specialmente nel fare le cose come dire il direttore per cambiare le scene (in quanto comporta Open GL)

Esiste un modo per ottenere qualche codice da eseguire sul thread principale?

risposta

46

Finché si dispone di un contesto, si può fare qualcosa di simile:

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

E per eseguire codice sul thread UI:

mainHandler.post(new Runnable() { 

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

Come suggerito da kaka:

È inoltre possibile utilizzare lo statico Looper.getMainLooper() che

Restituisce il looper principale dell'applicazione, che risiede nel thread principale dell'applicazione.

+7

Si potrebbe anche usare la statica [Looper.getMainLooper()] (http://developer.android.com/reference/android/os/Looper. html # getMainLooper()) che _ "restituisce il looper principale dell'applicazione, che risiede nel thread principale dell'applicazione." _. – kaka

+0

@kaka Cool, non lo sapevo, ora è stato aggiunto alla risposta :) – cYrixmorten

+0

post non esiste più. –

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

Anche true ma runOnUiThread è disponibile solo nelle classi Activity e Fragment – cYrixmorten

4

In C++:

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