2010-07-21 17 views

risposta

9

potrei sbagliarmi, ma penso startActivity() esegue internamente nel thread UI. Quindi sì, dovrebbe essere sicuro.

Se si voleva essere sicuro al 100%, richiamare la vostra startActivity() nella vostra attività di runOnUiThread() come Runnable.

+1

Ho controllato il codice sorgente per 'startActivity()' e sì, esso viene eseguito sul thread principale in modo da essere sicuri di chiamarlo dallo sfondo. –

+0

Non in tutti i firmware/casi. Ricevo 'java.lang.RuntimeException: Impossibile creare il gestore all'interno del thread che non ha chiamato Looper.prepare()' dopo la chiamata 'startActivityForResult'. È necessario eseguire questo nel thread dell'interfaccia utente o in alcune cattive implementazioni è possibile ottenere alcuni arresti anomali. – Enyby

0

ho fatto un esperimento: - attività iniziata a partire da fili non ui e in onCreate() mettere un ciclo da 1 a 100, dove i stampavano filo nome Thread.currentThread() - mettere lo stesso ciclo di destra dopo l'attività inizia in discussione non ui

uscita è stata allo stesso tempo mostrando loro nomi discussione [AsyncTask # 1,5, principale] e filetto [principale, 5, principale]

4

le prime righe di startActivityForResult() (utilizzato da tutti i startActivity() varianti) suggerisce che sia ok:

public void startActivityForResult(Intent intent, int requestCode, Bundle options) { 
    if (mParent == null) { 
     Instrumentation.ActivityResult ar = 
      mInstrumentation.execStartActivity(
       this, mMainThread.getApplicationThread(), mToken, this, 
       intent, requestCode, options);